有什么方法可以确定客户在网页上花费的时间
假设我有一个开放源Web服务器或者代理,我可以对其进行增强,比如说apache或者squid。
有没有一种方法可以确定每个客户在网页上花费的时间?
HTTP当然是无状态的,因此它并不是微不足道的,但是也许有人对如何解决此问题有一个想法?
解决方案
并非没有一些javascript不断在客户端上访问服务器,然后检查它何时停止(但是当然要假设用户已启用javascript)。还有多种(丑陋的)方法可以检测到用javascript关闭的窗口,但是这些方法不会总是触发。例如。浏览器崩溃。
我有点奇怪为什么我们仍然要这样做。如果某人查看网页3秒钟,又被另一个标签页/窗口分散了注意力,却让网页打开了2个小时怎么办?我们得到的答案是2个小时,我们(可能)想要的答案是3秒。
使用Apache或者Squid,我们几乎无法检测到用户在页面上花费的时间。
但是,在网页上添加一些额外的糖,我们可以:
- 试用Google Analytics(分析)。
它是免费的,并且具有很多功能。
但是我们还可以邀请Google来查看我们网站的统计信息……(但这也许可以帮助他们确定是否要购买商品:-)
我们可以计算从请求页面到请求下一页的时间,但是只有当用户在请求下一页之前一直停留在该页面上时,这才是正确的。即使这样,他仍然可能仍在原始页面上(例如,他在选项卡中打开了新页面),并且只有在他们确实浏览到另一页面时才能工作。
唯一可以确定的方法是每隔十秒左右使用Javascript从打开的页面ping服务器,只是说"我还在被阅读!"
实际上,我见过javascript分析软件包,它们不仅通过频繁ping服务器来跟踪我们在页面上停留了多长时间,而且还跟踪屏幕上的内容。通过测量浏览器窗口的大小以及文档的滚动位置,他们能够准确确定每个元素在屏幕上的停留时间。通过跟踪鼠标的位置,可能也可以很好地猜测它们在看什么。我现在找不到链接,但这是简短的故事。如果我们真的对人们在看什么以及有多长时间感兴趣,可以这样做。我们可以追踪的数量没有太多限制。
另外,请考虑一下,如果我们不想对服务器进行过多的ping操作,则可以将内容缓冲在内存中,并且仅在有足够的数据量时或者在页面关闭之前将其发送到服务器。
在PC变得更强大且标签式浏览器流行之前,这种度量标准实际上在几年前就很流行了,并且变得越来越难以准确地度量。过去,这样做的标准方法是假设人们通常一次只加载一页,并且仅使用服务器日志数据来确定两次页面浏览之间的时间。标准分析供应商(例如Omniture和Urchin,现在称为Google Analytics(分析))将对此进行计算。
通常,我们设置跟踪cookie是为了能够随着时间的推移识别特定的人/浏览器,但是在短期内,我们只能使用IP地址/用户代理组合。
因此,基本上,我们只需要处理日志数据并计算该页面在页面上浏览了多长时间的页面浏览量之间的差异。我们设置了一些规则(或者分析供应商做到了这一点),例如丢弃/截断超出某个截断时间(例如10分钟)的时间,在该截断中我们假设该人实际上不是在读书,而是在窗口/标签中打开了页面。
这个数据完美吗?很明显不是。但是我们只需要足够的"足够好"的数据来进行统计分析并得出一些结论。
对于纵向分析(读者随时间的习惯)以及站点上不同页面之间的定性比较,它仍然很有用。 (即,在两篇700字的文章之间,如果一篇文章的平均阅读时间是另一篇文章的两倍,那么实际上更多的人正在阅读第一篇文章。)当然,网站必须足够繁忙才能拥有足够的数据点丢弃所有"不良"离群数据点后,进行统计上合理的分析。
是的,我们可以使用Javascript发送保持活动状态以改善数据。我们可以在document.onload之后以给定的时间间隔进行轮询,或者在页面的各个部分上设置鼠标悬停事件。
另一种技术是使用Javascript向每个命中服务器的<a href>
添加一个onclick事件。然后,我们不仅知道有人单击链接将其从站点中删除时,还进行了非常复杂的"热点"分析,该分析结果是,如果有人单击了页面下6段链接,那么他们一定已经读了那么远。