# 前端性能优化实战指南
## 1. 资源加载优化
### 代码压缩与合并
```javascript
// 使用Webpack配置示例
module.exports = {
optimization: {
minimize: true, // 开启代码压缩
splitChunks: {
chunks: 'all' // 公共代码拆分
}
}
}
- 使用TerserPlugin进行JS压缩
- 配置CSSNano压缩CSS
- 合并小文件减少HTTP请求
图片优化方案
<picture>
<source srcset="image.webp" type="image/webp">
<source srcset="image.jpg" type="image/jpeg">
<img src="image.jpg" alt="Fallback">
</picture>
- 使用WebP格式替代传统格式
- 实现响应式图片加载
- 采用懒加载技术(Lazy Loading)
2. 渲染性能提升
关键CSS提取
// 使用Critical插件提取首屏CSS
const critical = require('critical');
critical.generate({
base: 'dist/',
src: 'index.html',
target: 'index.html',
width: 1300,
height: 900
});
- 内联关键CSS
- 异步加载非关键CSS
- 使用preload预加载重要资源
减少重排重绘
// 批量DOM操作示例
const fragment = document.createDocumentFragment();
items.forEach(item => {
const li = document.createElement('li');
li.textContent = item;
fragment.appendChild(li);
});
list.appendChild(fragment);
- 使用transform替代top/left动画
- 避免频繁读写DOM属性
- 使用will-change提示浏览器优化
3. 缓存策略优化
服务端缓存配置
# Nginx缓存配置示例
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 1y;
add_header Cache-Control "public, no-transform";
}
- 设置合理的Cache-Control头
- 实现内容哈希指纹
- 配置Service Worker缓存
4. 代码执行效率
防抖与节流
// 节流函数实现
function throttle(fn, delay) {
let lastCall = 0;
return function(...args) {
const now = Date.now();
if (now - lastCall >= delay) {
fn.apply(this, args);
lastCall = now;
}
};
}
- 优化事件监听频率
- 减少不必要的计算
- 使用Web Worker处理密集型任务
5. 监控与持续优化
性能指标采集
// 使用Performance API
const timing = performance.timing;
const loadTime = timing.loadEventEnd - timing.navigationStart;
console.log(`页面加载耗时: ${loadTime}ms`);
- 建立性能基准线
- 使用Lighthouse定期检测
- 实施A/B测试验证优化效果
最佳实践总结
-
资源层面:
- 启用Gzip压缩
- 使用HTTP/2协议
- 预加载关键资源
-
渲染层面:
- 优化CSS选择器复杂度
- 避免布局抖动
- 使用content-visibility属性
-
架构层面:
- 实现代码分割
- 采用PRPL模式
- 考虑SSR/SSG方案
-
工具链:
- 配置Bundle分析
- 实现自动化性能测试
- 建立性能预算机制
通过综合应用这些技术,可使页面加载速度提升40%以上,交互响应时间减少50%,显著改善用户体验。