有个需求是需要记录用户在某页面的浏览到关闭标签的停留时间,
用户是浏览本文 还是 挂起该页面,
请问有什么好的解决方案吗?
感谢 @vitech 的回答,对我有帮助,这个看似简单的问题确实比较麻烦,没有一个专门的API能准确的计算出这个时间,只能结合前端各个事件综合判断得出一个适合自己需求的大概时间。
这个问题今日头条官方如何精确统计页面停留时长也有讨论分享,在此记录。
10 回答11.1k 阅读
15 回答8.4k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
这是一个比较复杂的课题,有很多解决方案
也得看你需求是长期的时长记录,还是即使用户只访问你的页面一次也得记录停留时间。如果长期记录,可以将时长缓存到Cookie,下一次访问时再提交统计记录。
不管哪种思路,肯定要用到一个计时器,要么用setInterval累加秒数,要么在onload时记录时间戳,也可以调用window.performance.timing获取更完整的各种时间节点,计时不难,难点在于用户离开网页的一瞬间如何把这个记录传到后端。以前常用unload、beforeunload事件,但是chrome已经放弃了对其的支持,很多浏览器的表现也不同,而且有时候浏览器意外关闭时候无法触发事件。
有一个相对比较好的方案就是用ajax轮询或者websocket的心跳检测,定时向服务器传递心跳,由服务器记录停留时长,虽然消耗带宽但是效果肯定是最好的,在任何情况都能记录精准的时长。
另外对于非IE浏览器,现在的navigator.sendBeacon函数能比较好的代替以前在beforeunload事件中提交ajax的效果,详见MDN的解释: