用户体验研究过程中,我们经常需要使用前端脚本采集用户访问行为相关的数据,例如监听鼠标的点击事件,记下点击的位置及被点击的元素等。一个不可避免问题是,何时将采集到的数据发送到服务器呢?最直接的方案是每次收集到数据后立即发送,但这可能会带来较多的HTTP请求,一方面降低页面的性能,另一方面也增加了打点服务器的压力。另一个方案是先将收集的数据缓存一下,然后按一定规则发送(比如每收集满10条数据发一次,或者每隔5秒钟发一次),其中最终极的方案是所有的数据都缓存起来直到离开页面之前(beforeunload事件触发时)再发送。不过这个终极方案也有自己的问题,比如beforeunload这个事件可靠吗?在这个事件中发送打点的丢失率有多少?近期我们就这些问题做了一个研究,对这个丢失率也有了一个更具体的认识。主要的研究过程如下:
首先我们需要收集数据,这儿主要有两个数据:页面加载时立即发送一个打点,称为PV打点;监听页面的beforeunload事件,在这个事件触发时再发送一个打点,称为unload打点。显然,如果丢失率为0或非常小的话,PV打点的数目和unload打点的数目应该相等或非常接近。即丢失率的计算公式为:丢失率=(PV-unload)/PV*100%
如下图所示: