V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
oldcai
V2EX  ›  问与答

网站怎么统计在线时长

  •  
  •   oldcai · 2013-12-24 13:49:38 +08:00 · 6806 次点击
    这是一个创建于 3790 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想到几种办法:
    1. 通过onbeforeunload推出的时候通过ajax请求服务端。但是这个方法似乎总会弹出一个对话框,很烦人,不理想;

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

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

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

    ♥感谢♥
    第 1 条附言  ·  2013-12-24 16:29:01 +08:00
    如果没有现成的,求思路,能有其他的思路实现的话,欢迎探讨。
    10 条回复    1970-01-01 08:00:00 +08:00
    family
        1
    family  
       2013-12-24 16:33:14 +08:00   ❤️ 1
    用户访问第2页时间-访问第1页时间=上一页停留时间。

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

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

    不写数据库,效率是很高的。
    oldcai
        10
    oldcai  
    OP
       2013-12-25 11:40:35 +08:00
    @9hills 嗯,你这种方法确实不错,心跳包都不用跟数据库有关系了,这样看起来确实压力不大了。
    感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5410 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:37 · PVG 17:37 · LAX 02:37 · JFK 05:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.