【问题标题】:Monitoring page view times监控页面查看时间
【发布时间】:2011-11-18 16:34:15
【问题描述】:

有没有什么简单的方法可以监控用户浏览页面的时长?

Google Analytics 通过允许您查看您的网站访问者在特定页面上停留的时间来使用此功能。像这样的东西可以用 PHP 或 JavaScript 复制吗?

【问题讨论】:

    标签: php javascript monitoring pageviews


    【解决方案1】:

    是的,这很容易。只需在页面加载时启动计时器,并在用户离开页面时将其发送到某个服务器脚本进行记录。

    触发页面离开事件读取here

    示例客户端代码:

    <html>
    ...
    <script>
    var visit_start_time_ms = (new Date).getTime();
    window.onbeforeunload = function() {
        var visit_time = (new Date).getTime() - visit_start_time_ms;
        xmlhttp=new XMLHttpRequest();
        xmlhttp.open("GET","http://your-tracking-server.com/track.php?track_url=...&visit_time=" + visit_time,true);
        xmlhttp.send();
    };
    </script>
    ...
    </html>
    

    您的服务器端脚本位于 your-tracking-server.com/track.php:

    ...
    mysql_query('INSERT INTO track_visit_time (url, time) VALUES ("'.myescape($_GET['track_url']).'", '.float($_GET['visit_time']).')');
    ...
    

    请注意,客户端没有经过测试,也根本没有跨浏览器。服务器端使用了已弃用的函数 mysql_query。

    【讨论】:

    • 想显示您的myescape() 功能代码? $5 表示您以某种形式对 SQL 注入持开放态度。
    • 这是我的想象函数。我在所有项目中都使用 PDO 和准备好的语句。感谢您的关注。
    【解决方案2】:

    执行此操作的常用方法是简单地测量一次页面浏览与下一次浏览之间的时间。不过,这有很多“陷阱”!

    • 您不知道最后一页加载的时间
    • 您不知道跳出的时间
    • 多个选项卡会出现问题以及其他问题
    • 有人在您的页面上停留了 4 小时,还是他们关闭了浏览器又回来了?

    要解决这些问题,另一种常用方法是轮询服务器。您可以通过长轮询(连接保持打开状态,一分钟左右没有数据传输,然后立即建立另一个连接)或每 5 秒左右重复访问您的服务器来执行此操作。我推荐使用长轮询方法,因为它占用的带宽要少得多。

    【讨论】:

      【解决方案3】:

      您可以在控制器环境中执行此操作,如果用户正在查看特定网页(以及在哪里),他们的眼睛会被跟踪。如果您将浏览器内跟踪仅用于常见的事情,例如用户接到电话或切换到其他标签以及我们每天在打开浏览器时所做的所有事情,这通常有助于消除问题。

      【讨论】:

        【解决方案4】:

        我认为您可以尝试使用 window.onbeforeunload 方法来触发 ajax 调用。当页面加载时,记录时间,当它卸载时,使用 ajax 将经过的时间发送到您的服务器。该页面显然永远不会看到响应,但这并不重要。

        正如布拉德指出的那样,这有点不可靠。另一种方法是每隔几秒更新一次服务器。您还应该将间隔时间的一半添加到经过的时间,以考虑到上次更新和用户离开之间的平均时间。例如,如果您每 10 秒更新一次,而最后一次更新是 40 秒,则假设它们存在 45 秒。这涵盖了 40.0 秒到 49.999 秒之间未记录的情况。

        【讨论】:

        • @Brad 我目前正在自己​​调查这个问题,看看我是否可以改进答案。
        • @Brad:你为什么这么说? onbeforeunload 事件不可靠吗?
        • @xbonez 事件很好,但是 ajax 调用可以在它有机会被发送之前很快被取消。我只是自己测试了一下,没有成功触发一次调用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-10
        • 1970-01-01
        相关资源
        最近更新 更多