Lighthouse 性能分为什么突然掉到30分?
我最近用 Lighthouse 测了一个 React 页面,性能分从 80 多直接掉到 30 分,完全没动过关键资源加载逻辑,很困惑。
页面结构很简单,就是个带懒加载图片的列表,但 Lighthouse 报告说「Reduce unused JavaScript」和「Eliminate render-blocking resources」问题严重。下面是我组件里的一段代码:
import { lazy, Suspense } from 'react';
const LazyImage = lazy(() => import('./LazyImage'));
function ImageList() {
return (
<div>
{[1, 2, 3].map(id => (
<Suspense key={id} fallback={<div>Loading...</div>}>
<LazyImage src={<code>/img-${id}.jpg</code>} />
</Suspense>
))}
</div>
);
}
我已经用了 Suspense + lazy,按理说 JS 不该阻塞渲染啊,怎么还会被扣这么多分?是不是动态导入反而让 Lighthouse 误判了?
首先检查你的 LazyImage 组件是不是加载了太多不必要的依赖。React 的懒加载确实可以减少初始加载时间,但如果 LazyImage 里引入了其他重量级库,反而会拖慢整体性能。
建议你对 LazyImage 做一下代码分割,把不必要的依赖都移出去。另外,尽量用纯函数组件来减少内存占用。像这样重构一下:
注意安全方面,动态导入时要确保第三方库的来源可信,防止引入恶意脚本。同时考虑给图片加上 loading="lazy" 属性,现代浏览器会对这个属性做专门优化。
还有一点容易被忽略:Lighthouse 测试时最好在干净的环境运行,关闭所有不必要的插件和扩展程序,它们可能会影响测试结果。我之前就遇到过这种情况,装了太多开发工具,导致分数不准。
最后提醒一句,性能优化是个持续的过程,不要指望一次调整就能完美解决。慢慢来,观察每次改动的效果。
这样既保持懒加载功能又不会触发Lighthouse的JS阻塞警告。测试时记得用生产环境build,开发模式的React会自带性能损耗。