安卓端 page_view 比 iOS 多 1.7 倍,来源里大量是地址栏推荐,用户还没点进去,事件已经发出去了。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,Chrome 的预渲染会在后台提前加载页面,脚本跟着执行,page_view 提前发出。用户最终没进入时,这条记录就成了幽灵会话。

「预渲染重复上报」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。报错里带路径的,先去看那个路径在不在、权限对不对。

if (document.prerendering) {
  document.addEventListener('prerenderingchange', sendPageView);
} else {
  sendPageView();
}

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,判断 document.prerendering,为 true 时先不发;监听 prerenderingchange,真正激活后再上报;用 Page Visibility 状态做二次校验;对比两个平台的会话数,确认差距收窄。

最后用这个标准收尾,安卓和 iOS 的 page_view 比例回到 1.1 倍以内,幽灵会话消失。

作者 9823189