为什么在Lighthouse测试中首屏加载时间反而变长了?
最近在给项目做性能优化,把公共代码抽离成vendor chunk,还给图片加了懒加载,但Lighthouse测出来的首屏时间反而从2秒变成3秒了。明明控制台Network里总下载量少了200kb,这是怎么回事啊?
我检查过webpack配置:
optimization: {
splitChunks: {
chunks: 'all',
minSize: 30000,
minChunks: 1
}
}
这边配置没问题啊,而且浏览器开发者工具的Coverage也显示重复代码确实减少了…
难道是Lighthouse的测试环境有问题?还是首屏时间计算方式我理解错了?急得快要秃头了
记得调整下Lighthouse的节流设置,用Fast 3G再测几次,别熬夜太晚,头发要紧。
Lighthouse 测的是**用户能实际看到内容的时间**,不是 Network 里那个 complete 时间。你把公共代码拆成 vendor chunk 后,如果主业务代码依赖 vendor,但浏览器要先下 vendor 再下 main,中间多了一个请求的 round trip,反而拖慢了首屏。
建议你看看 Network 面板里,**main.js 和 vendor.js 的加载顺序和开始时间**,是不是 main.js 要等 vendor.js 下完才开始下。如果是,那说明你拆 chunk 的方式反而让关键路径变长了。
你可以试试下面这个配置,把 vendor chunk 的优先级调高:
这样 vendor 会先加载,main.js 后加载但可以更快执行完,Lighthouse 的首屏时间才不会被拖慢。
另外,图片懒加载也可能影响 Lighthouse 的感知加载时间(LCP),你确认一下首屏关键图是不是没加懒加载?如果首屏图也懒加载了,但没在首屏触发,Lighthouse 就会认为你这图根本没加载,导致评分更低。
总之,别光看 Network 的总体积,关键是要让**首屏需要的资源尽早加载、尽早执行**。我被这个问题坑了一整天,血泪教训,希望你少走弯路。