最近在帮客户做官网重构时(你们懂的甲方爸爸的龟速需求),Lighthouse评分从38分直接飙到92分!!!整个过程就像给网站做了场大型外科手术。今天就把我的"手术工具箱"全公开,这些坑我当年可都是拿头发换来的(泪目)。
1. 图片:从胖子到瘦子的终极改造
WebP格式必须给我焊死在DNA里!实测同一张Banner图,JPG格式1.2MB,转WebP直接瘦身到380KB(膝盖收割机啊)。但别忘了兼容性老古董:
<picture>
<source srcset="image.webp" type="image/webp">
<img src="image.jpg" alt="...">
</picture>
更狠的来了——响应式图片!用srcset属性根据设备DPI自动切换:
<img src="small.jpg"
srcset="medium.jpg 1000w, large.jpg 2000w"
sizes="(max-width: 600px) 100vw, 50vw">
2. JS/CSS:榨干最后一滴性能
Tree Shaking不是玄学!Webpack配置要加狠料:
optimization: {
usedExports: true,
minimize: true,
minimizer: [new TerserPlugin()] // 死亡压缩插件
}
但更骚的操作是代码分割,用动态import实现按需加载:
const handleClick = async () => {
const module = await import('./heavyModule.js');
module.doSomething();
};
3. 渲染层:阻止浏览器暴走
重排重绘是性能杀手!记住这两个黄金法则:
- 用transform代替top/left动画(GPU加速真香)
- 批量DOM操作请认准documentFragment
const fragment = document.createDocumentFragment();
for(let i=0; i<1000; i++) {
const div = document.createElement('div');
fragment.appendChild(div);
}
document.body.appendChild(fragment); // 单次重排搞定
4. 网络层:把CDN用出花来
别以为随便买个CDN就完事了!高阶玩法:
- 边缘计算:在CDN节点运行Lambda@Edge处理图片裁剪
- 智能路由:根据用户位置选择最优POP点
- 缓存策略三件套:
- HTML: Cache-Control: no-cache
- CSS/JS: max-age=31536000
- 图片: max-age=2592000 + stale-while-revalidate
5. 监控:给网站装上X光机
光优化不监控就是耍流氓!我的监控三板斧:
- Chrome DevTools的Performance面板(火焰图必看)
- Web Vitals指标实时监控:
import {getCLS, getFID, getLCP} from 'web-vitals'; getCLS(console.log);
- 自建性能看板,用Grafana展示FP/FCP/TTI等关键指标
6. 服务端:隐藏的加速Buff
Brotli压缩比Gzip更狠!Nginx配置:
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json...;
HTTP/2 Server Push用好了直接起飞:
Link: </styles.css>; rel=preload; as=style
7. 缓存策略:永不过时的艺术
缓存玩得好,加载没烦恼!我的缓存金字塔:
- Service Worker缓存核心资源
- Memory Cache用于高频小文件
- Disk Cache存大文件
- 最后才是网络请求
Cache API的正确姿势:
caches.open('v1').then(cache => {
cache.addAll([
'/styles.css',
'/script.js'
]);
});
8. 彩蛋:那些反常识的优化技巧
- 删掉jQuery:现代浏览器原生API足够强大
- 禁用console.log:生产环境打包时自动移除
- DNS预解析:
- 字体优化:subset字体+font-display: swap
9. 终极武器:性能优化自动化
我的CI/CD流水线必装插件:
- Webpack Bundle Analyzer(打包分析神器)
- Critters(关键CSS提取器)
- Puppeteer自动运行Lighthouse测试
# 在CI脚本中加入
lighthouse --chrome-flags="--headless" --output=html --output-path=./report.html https://your-site.com
最后说点掏心窝的
性能优化不是一劳永逸的事(甲方改需求的速度可比我们优化快多了)。建议每个月做一次完整的性能审查,把优化项做成Checklist整合到开发流程中。记住,用户可不会因为你的网站快而夸你,但绝对会因为它慢而骂你!