前端性能优化10个实用技巧

1图片资源深度优化

<picture>
<source srcset="image.avif" type="image/avif">
<source srcset="image.webp" type="image/webp">
<img src="image.jpg" alt="描述">
</picture>

2CSS加载与执行优化

<link rel="stylesheet" href="non-critical.css" media="print" onload="this.media='all'">

3JavaScript加载策略

<!-- 不阻塞HTML解析,加载完成后立即执行 -->
<script src="script1.js" async></script>
<!-- 不阻塞HTML解析,HTML解析完后执行 -->
<script src="script2.js" defer></script>

4强缓存与协商缓存配置

Cache-Control: max-age=31536000, immutable // 1年有效期,不发起验证请求

5减少重绘与重排

// 优化前:触发多次重排 element.style.width = '100px'; let height = element.offsetHeight; // 触发重排 element.style.height = height + 'px'; // 再次触发重排 // 优化后:只触发1次重排 let height = element.offsetHeight; // 先读取 element.style.cssText = 'width: 100px; height: ' + height + 'px'; // 批量修改

6资源压缩与合并

注意:合并文件不宜过大(建议单个JS/CSS不超过300KB),否则会影响缓存复用率

7预加载关键资源

<link rel="preload" href="critical-font.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="hero-image.webp" as="image">

8首屏加载体验优化

核心指标:LCP(最大内容绘制)应控制在2.5秒内,FID(首次输入延迟)<100毫秒

9使用CDN与HTTP/2

10性能监控与持续优化

// 监控首屏加载时间 const loadTime = window.performance.timing.domContentLoadedEventEnd - window.performance.timing.navigationStart; console.log('首屏加载时间:' + loadTime + 'ms');