前端性能优化完整指南
前言
前端性能直接影响用户体验和业务转化率。研究表明,页面加载每延迟1秒,转化率下降7%。本文将分享完整的前端性能优化方案,涵盖网络、资源、渲染、运行时四个维度。
一、网络层面优化
1.1 减少HTTP请求
合并CSS/JS文件,使用雪碧图,小图片转Base64内联。减少第三方脚本数量,避免不必要的请求。
1.2 使用CDN加速
静态资源使用CDN分发,就近访问降低延迟,同时分担源站压力,提供天然缓存机制。
1.3 启用压缩
配置Gzip或Brotli压缩,HTML/CSS/JS压缩率可达60-80%。
1.4 升级HTTP/2
支持多路复用、头部压缩、服务器推送,显著提升并发请求效率。
二、资源加载优化
2.1 图片优化
格式选择:
- JPEG:照片、复杂图像
- PNG:图标、透明图
- WebP:现代浏览器,比JPEG小25-35%
- SVG:矢量图形,无限缩放
响应式图片:
<picture>
<source srcset="image.avif" type="image/avif">
<source srcset="image.webp" type="image/webp">
<img src="image.jpg" alt="描述" loading="lazy">
</picture>懒加载:使用原生loading="lazy"或Intersection Observer API实现。
2.2 JavaScript优化
代码分割:
// 路由级分割
const Home = lazy(() => import('./pages/Home'));
// 条件加载
button.addEventListener('click', async () => {
const modal = await import('./Modal');
});Tree Shaking:按需导入,避免导入整个库。
defer/async:合理使用脚本加载属性。
2.3 CSS优化
关键CSS内联,非关键CSS异步加载;减少选择器复杂度,避免深层次嵌套。
三、渲染性能优化
3.1 关键渲染路径
减少关键资源数量和大小,缩短关键路径长度。内联关键CSS,延迟非关键JS。
3.2 避免布局抖动
避免读写交替导致强制同步布局,批量读写操作。
3.3 虚拟列表
长列表只渲染可视区域内的元素,大幅提升渲染性能。
四、运行时性能优化
4.1 防抖与节流
function debounce(fn, delay = 300) {
let timer = null;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => fn(...args), delay);
};
}
function throttle(fn, interval = 300) {
let last = 0;
return (...args) => {
const now = Date.now();
if (now - last >= interval) {
last = now;
fn(...args);
}
};
}4.2 Web Worker
大数据计算、复杂算法使用Web Worker,避免阻塞主线程。
4.3 内存泄漏预防
及时清除定时器、事件监听器,避免脱离DOM的引用。
五、性能监控
Core Web Vitals
- LCP < 2.5s:最大内容绘制
- FID < 100ms:首次输入延迟
- CLS < 0.1:累积布局偏移
使用Lighthouse进行全面审计,建立性能预算,持续监控。
结语
前端性能优化是系统性工程,没有银弹。先测量,再优化,最后验证效果。在性能和功能间找到平衡,数据驱动持续改进。