本文最后更新于 42 天前,其中的信息可能已经有所发展或是发生改变。
📌 核心痛点:
- 首屏资源过大(>1MB)
- 关键请求链路过长
- JavaScript执行阻塞
- 网络波动敏感
✨ 优化成果:
- 首屏加载速度提升300%
- FCP时间缩短至1s内
- LCP优化达80%
- 可交互时间TTI降低65%
🔍 一、问题定位分析
1.1 性能检测工具
# 使用Lighthouse生成报告
npm install -g lighthouse
lighthouse http://localhost:3000 --view
典型问题分布:
🛠️ 二、六大核心优化策略
2.1 代码分割(Code Splitting)
// vue-router配置
const routes = [
{
path: '/dashboard',
component: () => import(/* webpackChunkName: "dashboard" */ '@/views/Dashboard.vue')
}
]
// 按需加载三方库
import { debounce } from 'lodash-es'
优化效果:
优化前 | 优化后 |
---|---|
2.1MB | 680KB |
2.2 预加载关键资源
<!-- 预加载关键字体 -->
<link rel="preload" href="/fonts/Inter.woff2" as="font" type="font/woff2" crossorigin>
<!-- 预取非关键资源 -->
<link rel="prefetch" href="/charting-library.js">
预加载策略优先级:
2.3 资源压缩优化
// vite.config.js
export default defineConfig({
build: {
brotliSize: false, // 关闭计算
terserOptions: {
compress: {
drop_console: true
}
}
}
})
压缩策略矩阵:
资源类型 | 工具 | 压缩率 |
---|---|---|
JavaScript | Terser | 65% |
CSS | CSSNano | 40% |
图片 | Squoosh | 70% |
字体 | WOFF2 | 30% |
2.4 服务端渲染(SSR)
// 使用Nuxt3配置
export default defineNuxtConfig({
ssr: true,
nitro: {
preset: 'node-server'
}
})
SSR优化前后对比:
指标 | CSR | SSR |
---|---|---|
FCP | 2.8s | 0.9s |
TTI | 3.1s | 1.2s |
LCP | 3.5s | 1.5s |
2.5 浏览器缓存策略
# Nginx配置
location /assets {
expires 1y;
add_header Cache-Control "public, immutable";
}
缓存策略分级:
2.6 白屏过渡方案
<!-- 骨架屏组件 -->
<template>
<div class="skeleton">
<div class="skeleton-header"></div>
<div class="skeleton-chart"></div>
<div class="skeleton-grid">
<div v-for="i in 6" :key="i"></div>
</div>
</div>
</template>
<style>
.skeleton {
animation: shimmer 2s infinite linear;
background: linear-gradient(
to right,
#eff1f3 4%,
#e2e2e2 25%,
#eff1f3 36%
);
}
</style>
🚨 三、企业级解决方案
3.1 性能监控系统
// 性能指标上报
const perfObserver = new PerformanceObserver(list => {
const entries = list.getEntries()
sendToAnalytics(entries)
})
perfObserver.observe({
entryTypes: ['largest-contentful-paint', 'first-input']
})
监控指标阈值:
指标 | 优秀 | 良好 | 需优化 |
---|---|---|---|
FCP | ≤1s | ≤2s | >3s |
LCP | ≤2s | ≤3s | >4s |
CLS | ≤0.1 | ≤0.25 | >0.25 |
3.2 容灾降级方案
// 资源加载失败处理
window.addEventListener('error', (e) => {
if (e.target.tagName === 'SCRIPT') {
loadFallbackResource(e.target.src)
}
})
// CDN自动切换
const cdnHosts = ['cdn1.site', 'cdn2.site', 'cdn3.site']
const activeHost = testCDNSpeed(cdnHosts)
🧰 四、工具链推荐
优化工具箱:
分类 | 工具 | 用途 |
---|---|---|
分析 | Webpack Bundle Analyzer | 包体积可视化 |
压缩 | vite-plugin-compression | 资源压缩 |
监控 | Lighthouse CI | 持续监测 |
CDN | Cloudflare | 全球加速 |
优化策略总结:
1. 分阶段加载:优先加载关键资源,延后非必要内容
2. 并行化处理:利用Preload/Prefetch优化资源加载顺序
3. 体积控制:通过Tree-shaking和压缩减少传输量
4. 渲染优化:SSR+骨架屏实现瞬时响应
5. 缓存策略:最大化利用浏览器缓存机制
6. 监控兜底:建立性能监控和容灾体系