🚀 前端性能优化:加速 HTTP 请求的 10 大核心策略
🌟 一、减少请求次数
-
文件合并
# 未优化:6 个独立 CSS 请求 <link href="a.css"> <link href="b.css">... # 优化后:1 个合并请求(通过 Webpack 等打包工具) <link href="bundle.css">
效果:减少 80% 的 HTTP 头部开销(每个请求约 500-1000B)
-
雪碧图技术
/* 合并 10 个小图标为 1 张图 */ .icon-home { background: url(sprite.png) -10px 0; width: 20px; height: 20px; }
收益:减少 90% 的图片请求数
🔥 二、压缩传输体积
技术 | 实现方式 | 压缩率对比 |
---|---|---|
Gzip/Brotli | Nginx 配置启用压缩 | JS 文件缩小 70% |
WebP 图片格式 | <img src="img.webp" type="image/webp"> | 比 PNG 小 26% |
代码混淆 | Webpack + TerserPlugin | JS 体积减少 40% |
Webpack 压缩配置示例:
// webpack.config.js
optimization: {
minimizer: [new TerserPlugin({
parallel: true,
terserOptions: { compress: { drop_console: true } }
})]
}
🚄 三、缓存策略优化
-
强缓存 (Cache-Control)
# 服务器响应头设置 Cache-Control: max-age=31536000 # 1 年缓存
适用场景:哈希命名的静态资源(如
app.3a2b1c.js
) -
协商缓存 (ETag)
ETag: "33a64df551425fcc55e4d42a148795d9" If-None-Match: "33a64df551425fcc55e4d42a148795d9"
优势:304 响应比 200 快 50% 以上(无数据传输)
💡 四、代码级优化技巧
-
Tree Shaking
// 按需引入 lodash(节省 95% 体积) import { debounce } from 'lodash-es' // 而非整个 lodash
-
异步加载 (Code Splitting)
// Vue 路由懒加载 const UserList = () => import('./UserList.vue')
效果:首屏 JS 体积减少 60%
🌐 五、网络层优化
-
HTTP/2 多路复用
# Nginx 配置启用 HTTP/2 listen 443 ssl http2;
优势:并行传输 6-10 倍于 HTTP/1.1 的效率
-
CDN 加速
<!-- 静态资源使用独立域名 --> <script src="https://cdn.yoursite.com/app.js"></script>
收益:全球访问延迟降低 30-50%
📸 六、图片终极优化方案
格式选择策略 | 实现示例 | 适用场景 |
---|---|---|
响应式图片 | <img srcset="small.jpg 480w, large.jpg 1080w"> | 移动端适配 |
渐进式 JPEG | imagemin --progressive input.jpg | 大图加载体验 |
SVG 替代图标 | <svg>...</svg> | 矢量图标 |
图片压缩工具链:
# 使用 imagemin 自动压缩
npm install imagemin-webp imagemin-mozjpeg --save-dev
📊 性能数据对比
优化前 vs 优化后(某电商项目实测):
- 首屏加载时间:3.8s → 1.2s
- JS 总体积:2.1MB → 680KB
- HTTP 请求数:42 → 9
🔧 必备工具推荐
- Lighthouse:一键生成优化报告
- Webpack Bundle Analyzer:可视化分析包体积
- Cloudflare Polish:自动图片优化服务
优化原则:先用工具量化问题(如 Chrome DevTools 的 Network 面板),再针对性优化!