网站怎么统计在线时长

2013-12-24 13:49:38 +08:00
 oldcai
想到几种办法:
1. 通过onbeforeunload推出的时候通过ajax请求服务端。但是这个方法似乎总会弹出一个对话框,很烦人,不理想;

2. 通过setInterval等设置定时ajax请求服务端。这个办法精度越高(比如每10秒更新一次),但是这个办法一个是加大服务器负载,一个是精度不高;

3. Express.js + Socket.IO。似乎是比较好的方式?如果不考虑老浏览器的支持,是最合适的吧?

不知道有没有现成的开源的在线时长统计的框架,利用google等第三方统计暂不考虑在内。

♥感谢♥
6831 次点击
所在节点    问与答
10 条回复
family
2013-12-24 16:33:14 +08:00
用户访问第2页时间-访问第1页时间=上一页停留时间。

你说的都不靠谱,靠谱是通过分析web server日志实现。
oldcai
2013-12-24 16:47:17 +08:00
@family 要的是停留在一页上面的时间,感觉打开时间还是比换页时间靠谱一些。
分析日志的方式还是无法解决时间精度的问题,而且访问单页的用户根本无法统计到在线时长。
gihnius
2013-12-24 16:59:12 +08:00
websocket
oldcai
2013-12-24 18:29:08 +08:00
@gihnius 恩,Express.js + Socket.IO来利用websocket,这个我也觉得最靠谱。
andy12530
2013-12-24 19:01:01 +08:00
ga最简单,全网覆盖,不明白为啥不用。。
oldcai
2013-12-24 20:09:55 +08:00
@andy12530
如果不那么麻烦的话,就不想麻烦谷哥哥了
zhujinliang
2013-12-24 20:38:07 +08:00
楼主是想要多精确?要是论坛之类娱乐用的数据用一楼的方法就是了,要是想精确统计访客的数据,我们现在用1秒发回一个心跳的办法,服务器记录收到请求的时间及最后一次收到心跳的时间,两者的间隔就是该页面在线时间,实际用起来效率没你想的那么惨。相反用socket.io不仅徒增开发的复杂程度,而且在低端浏览器上也是类似的逻辑,反而会被一些用不到的功能累赘。
oldcai
2013-12-24 22:38:08 +08:00
@zhujinliang
感谢回复!
我这个项目精确度在5秒内就够了吧。
1秒一个心跳包,或者5秒一个心跳包,是可以的,不过大概是下策吧。
但是如果没有其他好办法,也就只能这样了。
9hills
2013-12-25 11:24:23 +08:00
@oldcai 心跳包对服务器压力没有你想象的那么大。

把处理心跳包的逻辑和你的网站分开,分析出某个uid某个页面的starttime/endtime,数据存入日志文件,然后再分析日志就好了。

不写数据库,效率是很高的。
oldcai
2013-12-25 11:40:35 +08:00
@9hills 嗯,你这种方法确实不错,心跳包都不用跟数据库有关系了,这样看起来确实压力不大了。
感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/94385

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX