Web:系统将记录用户显示每页的时间长度

时间:2010-10-08 18:40:28

标签: web

我有这个要求:

  

系统将记录用户显示每页的时间长度。

虽然在富客户端应用程序中微不足道,但我不知道人们通常会如何跟踪这一点。

编辑:John Hartsock

我一直对此感到好奇,在我看来,通过使用document.onunload事件可以实现这一点,可以准确地捕捉星星并停止所有页面的停留时间。基本上只要用户停留在您的网站上,您就可以始终获得除最后一页之外的每个页面的开始和停止时间。这是场景。

  • 用户进入您的网站。 - 我有一个 主页的开始时间
  • 用户转到您网站的第2页 - 我有主页停止时间和第2页的开始时间
  • 用户退出您的网站。 - 如何获得第2页的最终停止时间

问题变成是否可以跟踪用户何时关闭窗口或导航离开您的网站?是否可以使用onunload事件?如果没有,那么还有什么其他可能性呢?很明显,AJAX将是一条路线,但其他一些路线是什么?

7 个答案:

答案 0 :(得分:5)

我认为您无法捕获每一页的观看次数,但我认为您可能能够捕获足够的信息,以便分析网站使用情况。

创建一个包含以下列的数据库表:网页名称,用户名,开始时间和结束时间。

在页面加载时,将记录插入包含前三个字段数据的表中。返回该记录的ID以备将来使用。

在任何导航上,使用之前返回的ID更新导航事件处理程序中的记录。

与开始和结束时间的记录相比,开始时间最多会有更多记录。但是,您可以从这个简单的数据中进行这些分析:

  • 您可以通过计算开始时间来计算每个页面的访问次数。
  • 您可以计算用户为具有开始和结束时间的记录显示每个页面的时间长度。
  • 如果您有其他有关用户的信息,例如角色或位置,则可以对页面查看进行更多分析。例如,如果您了解角色,则可以查看哪些角色最常使用哪些页面。

由于某些网页比其他网页更频繁地被放弃,您的数据可能会被扭曲。

但是,您当然可以尝试捕获此数据并查看其显示的合理程度。有时候在现实世界中,我们必须用不完美的信息来弥补。但这可能已经足够了。


编辑:这些方法中的任何一种都可能满足您的需求。

1)这是 Ajax解决方案的HTML部分。它来自this page,其中包含用于在文本文件中记录信息的PHP代码 - 如果您愿意,可以轻松更改为写入数据库。

 <html>
<head>
<title>Duration Logging Demo</title>
<script type=”text/javascript”>
var oRequest;
var tstart = new Date();

// ooooo, ajax. ooooooo …
if(window.XMLHttpRequest)
oRequest = new XMLHttpRequest();
else if(window.ActiveXObject)
oRequest = new ActiveXObject(“Microsoft.XMLHTTP”);

function sendAReq(sendStr)
// a generic function to send away any data to the server
// specifically ‘logtimefile.php’ in this case
{
oRequest.open(“POST”, “logtimefile.php”, true); //this is where the stuff is going
oRequest.setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”);
oRequest.send(sendStr);
}

function calcTime()
{
var tend = new Date();
var totTime = (tend.getTime() – tstart.getTime())/1000;
msg = “[URL:" location.href "] Time Spent: ” totTime ” seconds”;
sendAReq(‘tmsg=’ msg);
}
</script>
</head>

<body onbeforeunload=”javascript:calcTime();”>
Hi, navigate away from this page or Refresh this page to find the time you spent seeing
this page in a log file in the server.
</body>
</html>

2)Another fellow建议在Page_Load中创建计时器。在那时写下初始数据库记录。然后,在计时器的Elapsed事件上,更新该记录。在onbeforeunload进行最后更新。然后,如果由于某种原因你错过了最后一次onbeforeunload事件,那么至少你会记录用户在页面上花费的大部分时间(取决于计时器Interval)。当然,如果您每秒更新一次并且拥有数百或数千个并发用户,则此解决方案将相对耗费资源。因此,您可以对其进行配置,以便为应用程序打开和关闭此功能。

答案 1 :(得分:2)

这必须使用一些javascript来完成。正如另一方所说,它并不完全可靠。但是你应该能够获得足够的准确数据。

这需要在卸载页面时从javascript代码调用您的服务器。挂钩的javascript事件是window.unload。或者您可以使用更好的API,例如jQuery。或者您可以使用现成的解决方案,例如WebTrendsGoogle Analytics。我认为两者都记录了页面显示的时间长度。

良好的网络分析非常困难。如果你必须管理大量的流量,那就变得更难了。您应该尝试找到现有的解决方案而不是重新发明自己的解决方案......

答案 2 :(得分:2)

我已将一些工作放入一个小型JavaScript库中,该库会计算用户在网页上的时长。它具有更准确(但并不完美)跟踪用户实际与页面交互的时间的额外好处。它忽略了用户切换到不同标签,闲置,最小化浏览器等的时间。建议的Google Analytics方法有缺点(据我所知),它只检查您的域处理新请求的时间。它将之前的请求时间与新的请求时间进行比较,并调用“您在网页上花费的时间”#39;。它实际上并不知道是否有人正在查看您的页面,最小化浏览器,将标签切换到自上次加载页面以来的3个不同的网页等。

正如其他人提到的那样,没有任何解决方案是完美的。但希望这个也能提供价值。

编辑:我已更新示例以包含当前的API使用情况。

http://timemejs.com

其用法示例:

包含在您的信息页中:

<script src="http://timemejs.com/timeme.min.js"></script>
<script type="text/javascript">
TimeMe.initialize({
    currentPageName: "home-page", // page name
    idleTimeoutInSeconds: 15 // time before user considered idle
});
</script>

如果您想自己向后端报告时间:

xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST","ENTER_URL_HERE",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var timeSpentOnPage = TimeMe.getTimeOnCurrentPageInSeconds();
xmlhttp.send(timeSpentOnPage);

TimeMe.js还支持通过websockets发送计时数据,因此您不必尝试强制完整的http请求进入document.onbeforeunload事件。

答案 3 :(得分:1)

在基于Web的系统中,没有办法可靠地执行此操作。当然,您可以记录用户显示的每个页面,并记录每个视图之间的时间长度,但是当他们在显示的最后一页上关闭浏览器时会发生什么?这只是这个要求的几十个问题之一。

答案 4 :(得分:1)

基于AJAX的方法怎么样?它只适用于Javascript在客户端,但每隔15秒向某个脚本发送一个POST将获得合理的粒度。

还有更复杂的“反向AJAX”事情你可以做...但我对它们知之甚少。

答案 5 :(得分:1)

您可以使用onunload来执行您需要的操作。让它向您的服务器发送AJAX请求以更新数据库。你可能想要返回false然后在AJAX请求完成后再执行document.close,这样它就不会过早退出并且不会丢弃ajax。

在数据库中,您只想存储页面,IP地址,事件发生的时间,以及它是onload还是onunload事件。

这就是它的全部。

答案 6 :(得分:0)

我最近举了一个记录html页面花费时间的示例。  刷新不会中断录制,而关闭会

我使用sessionStorage来解决该页面花费的“时间” 如果刷新    我将其放入sessionStorage 如果关闭    我无法从sessionSotrage获得它,所以我将时间设置为= 0

这是我的代码

`

<body>
time spent  :<div id="txt"></div>
</body>
<script>
    $(function () {
        statisticsStay();
    })
    function statisticsStay(){
        var second=0;
        if(sessionStorage.getItem('testSecond')!=null)
            second=sessionStorage.getItem('testSecond');
        var timer = setInterval(function(){
            second++;
            document.getElementById('txt').innerHTML=second;
        },1000);
        window.onbeforeunload = function(){
            sessionStorage.setItem('testSecond',second);
        };
    }

</script>

`