谈谈针对lighthouse性能优化分析
- Lighthouse 是 Google 提供的开源网站质量检测工具
主要从五个维度评估页面表现:
-
Performance(性能)
-
Accessibility(可访问性)
-
Best Practices(最佳实践)
-
SEO
-
PWA
Performance(性能) 是核心指标
Lighthouse 的性能分数主要由以下 6 个指标组成(加权平均):
| 指标 | 含义 | 理想值 | 权重 |
|---|---|---|---|
| LCP (Largest Contentful Paint) | 最大内容绘制时间 | < 2.5s | 25% |
| FID (First Input Delay) | 首次输入延迟 | < 100ms | -(新版改为INP) |
| INP (Interaction to Next Paint) | 用户交互响应时间 | < 200ms | 10% |
| CLS (Cumulative Layout Shift) | 累积布局偏移 | < 0.1 | 15% |
| FCP (First Contentful Paint) | 首次内容绘制 | < 1.8s | 10% |
| TTI (Time To Interactive) | 可交互时间 | < 3.8s | 10% |
| Speed Index | 页面视觉加载速度 | < 3.4s | 10% |
lighthouse报告
生成包括
-
1、Chrome DevTools → Lighthouse 面板 → 勾选 Performance → 生成报告
-
2、通过lighthouse cli
npx lighthouse https://example.com --view
报告中会展示:
- 网络瓶颈(如 JS 文件体积、未压缩)
- 渲染阻塞资源
- 未使用的 JS / CSS
- 图片优化建议
- 字体加载延迟
- 主线程阻塞时间
Lighthouse 的具体优化策略
核心指标: FCP (用于首屏渲染时间)、LCP(用于页面内容加载速度)
FCP 影响用户看到首屏内容的速度,LCP 影响用户页面主要内容加载完成的速度。
| 指标 | 良好 | 需要改进 | 差 |
|---|---|---|---|
| FCP | ≤ 1.5s | 1.5~3s | >3s |
| LCP | ≤ 2.5s | 2.5~4s | >4s |
FCP(首次内容绘制)
衡量用户看到首个视觉元素的时间。
典型问题:
- 相关静态文件太大、请求慢
- 样式阻塞渲染
- 占用主线程问题,避免JS 执行过早
优化建议:
-
压缩资源文件 ( HTML / CSS / JS )
-
减少阻塞渲染的外部 CSS/JS
-
非关键js脚本,比如第三方js的脚本,这些脚本不涉及页面的渲染,可以异步和延迟加载,避免页面的阻塞
-
JS 使用
defer或async延迟执行
-
-
使用 HTTP/2 并行加载 (开启 HTTP/2,提高并发请求性能)
- 在nginx中开启http2 (利用多路复用特性)
-
使用CDN缓存,开启缓存,提高资源访问效率, 减少重复请求 (强缓存、协商缓存)
LCP(最大内容绘制)
典型问题:
- 首屏图片过大 / 未懒加载
- Web 字体加载阻塞渲染
- 服务器响应慢(TTFB高)
优化建议:
-
使用 CDN 加速静态资源
-
优化图片(WebP)
-
优化渲染性能,减少浏览器的重排
-
优先加载关键资源,减少首屏布局阻塞
FID / INP(交互延迟)
- 衡量用户首次交互的响应流畅度。
典型问题:
- JS 体积太大,主线程被阻塞
- Vue/React 初始化开销大
- 大量同步任务(计算、渲染)
优化建议:
- 拆分大 JS 包(Code Splitting)
- 使用
requestIdleCallback/setTimeout延迟非关键逻辑 - Web Worker 处理耗时计算
- 懒加载组件
- 减少 Re-render(使用
memo、computed、watchEffect优化)
CLS(布局偏移)
量加载时布局是否跳动。
典型问题:
- 图片无固定宽高
- 动态广告插入(常见于内容站)
- 字体切换导致跳动
优化建议:
- 所有图片/视频设置固定宽高比
- 预留广告占位(Ad Placeholder)
- 使用字体显示策略:
- font-display: swap; 提高字体加载
TTI(可交互时间)
衡量页面从加载到完全可交互的时间。
优化建议:
- 懒加载非首屏组件
- 使用 Skeleton 骨架屏
- 提前加载关键 JS:
<link rel="preload" href="/main.js" as="script">
- 减少 JS 执行时间(主线程任务 < 50ms)
- 拆分大任务,异步化逻辑
Speed Index(视觉加载速度)
衡量用户感知到页面加载的速度。
优化建议:
- 服务端渲染(SSR / SSG)
- 骨架屏或渐进加载
- 优化动画和图片加载顺序
- 合理使用懒加载(IntersectionObserver)
常见性能问题及优化案例
| 问题 | 优化措施 |
|---|---|
| 首页加载慢 | 静态化首屏、CDN 加速、组件懒加载 |
| 图片大 | 使用 vite-imagetools 生成多尺寸图、自适应加载 |
| Google Ads 广告加载导致 CLS | 广告位预留占位容器,监听加载完成替换内容 |
| Vue 初始化慢 | 拆分 vendor 包、开启 script setup、减少响应式数据量 |
| CSS 阻塞渲染 | 使用 vite-plugin-critical 提取关键 CSS |