如何准确监控前端首屏加载时间?
我在做性能监控,想准确获取用户首屏加载完成的时间,但发现不同设备和网络下差异很大。用 performance.timing 里的字段好像不太准,比如 domContentLoadedEventEnd 有时候比实际看到内容还早。
试过用 PerformanceObserver 监听 paint 事件,但 LCP(最大内容绘制)在某些老机型上根本不触发。有没有更靠谱的方案?或者至少能兼容大部分浏览器的方法?
目前代码大概是这样:
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
if (entry.name === 'largest-contentful-paint') {
console.log('LCP:', entry.startTime);
}
}
});
observer.observe({ entryTypes: ['largest-contentful-paint'] });
首先保留你现有的 LCP 监控代码,但要补充几个关键点:使用
window.onload事件作为保底,虽然它比实际感知的首屏加载要晚些,但兼容性最好。另外建议加个定时器检测 DOM 变化,用 MutationObserver 来观察关键内容区域的变化。简单说就是:
这样三管齐下:LCP、MutationObserver、window.onload,基本能覆盖大部分情况。服务端也可以配合做些预加载优化,比如把关键资源提前推送。
最后提醒下,不同机型和网络差异是客观存在的,别指望能完全消除误差,尽量多采集数据取平均值吧。这活儿确实费劲,我也折腾过不少次。