前端性能优化实战指南
#performance#optimization#frontend
为什么性能很重要
性能直接影响用户体验和转化率。研究表明:
- 页面加载时间每增加 1 秒,转化率下降 7%
- 移动用户中 53% 会在页面加载超过 3 秒时离开
- 良好的性能表现能提升 SEO 排名
加载性能优化
1. 资源压缩
使用现代构建工具自动压缩代码:
// vite.config.js
export default {
build: {
minify: 'esbuild',
cssCodeSplit: true,
rollupOptions: {
output: {
manualChunks: {
vendor: ['react', 'react-dom']
}
}
}
}
};
2. 代码分割
按路由或组件懒加载:
// 路由级代码分割
const Home = lazy(() => import('./pages/Home'));
const About = lazy(() => import('./pages/About'));
// 组件级代码分割
const HeavyComponent = lazy(() => import('./HeavyComponent'));
3. 图片优化
- 使用 WebP/AVIF 格式
- 实现响应式图片
- 启用懒加载
<img
src="image.webp"
srcset="image-480.webp 480w, image-800.webp 800w"
loading="lazy"
decoding="async"
/>
运行时性能优化
1. 虚拟列表
处理大量数据时,只渲染可视区域的内容:
import { useVirtualList } from 'ahooks';
const { list, wrapperProps, outerRef } = useVirtualList(data, {
count: 10,
itemHeight: 50
});
2. 防抖与节流
减少高频事件的触发次数:
// 防抖:停止触发后执行
const debouncedSearch = debounce((query) => {
api.search(query);
}, 300);
// 节流:固定间隔执行
const throttledScroll = throttle(() => {
updateScrollProgress();
}, 100);
3. 缓存策略
利用浏览器缓存和 CDN 加速:
Cache-Control: public, max-age=31536000, immutable
性能监控
使用 Web Vitals 监控核心指标:
- LCP (Largest Contentful Paint):最大内容绘制
- FID (First Input Delay):首次输入延迟
- CLS (Cumulative Layout Shift):累计布局偏移
import { getCLS, getFID, getLCP } from 'web-vitals';
getCLS(console.log);
getFID(console.log);
getLCP(console.log);
总结
性能优化是一个持续的过程,需要:
- 建立性能预算
- 持续监控指标
- 定期审查代码
- 使用自动化工具
记住:最快的代码是不运行的代码。