「优化后快了多少」这个问题,大多数教程给的是主观感受。这篇给的是实测数据和可复现的测量方法。
一、先测量,再优化
没有基线的优化等于盲猜。第一步永远是拿到当前的真实指标:
# 只看首字节时间,排除网络干扰
curl -o /dev/null -s -w "TTFB: %{time_starttransfer}sn" https://你的域名/
# 页面大小(压缩后)
curl -s -H "Accept-Encoding: gzip" https://你的域名/ | wc -c
二、最常见的三个瓶颈
1. 图片未压缩(影响最大)
一张 4MB 的原图,转成 WebP 并限制最大宽度后通常能降到 200KB 以内——体积减少 95%,视觉上几乎无差别。
WordPress 自带的 wp_get_attachment_image() 会自动生成多个尺寸,但原图仍会被下载(如果直接引用)。正确做法是始终用响应式尺寸,并配合懒加载:
// 在模板里
echo wp_get_attachment_image($id, 'large', false, [
'loading' => 'lazy',
'decoding' => 'async',
]);
2. 阻塞渲染的 CSS / JS
主题和插件的每个 CSS 文件都会阻塞首屏渲染。压缩合并能显著减少请求数,但要小心顺序依赖。
3. 数据库查询过多
页面底部常会打印「数据库查询:N 次」。超过 60 次通常意味着有插件在做重复查询。
附:一键体检脚本
#!/bin/bash
# 站点性能体检
URL="${1:-https://example.com}"
echo "=== $URL ==="
echo -n "TTFB : "
curl -o /dev/null -s -w "%{time_starttransfer}sn" "$URL"
echo -n "总耗时 : "
curl -o /dev/null -s -w "%{time_total}sn" "$URL"
echo -n "HTML 大小 : "
curl -s "$URL" | wc -c | awk '{printf "%.1f KBn", $1/1024}'
echo -n "gzip 后 : "
curl -s -H "Accept-Encoding: gzip" "$URL" | wc -c | awk '{printf "%.1f KBn", $1/1024}'
echo -n "请求数 : "
curl -s "$URL" | grep -oE '(src|href)="[^"]+.(css|js)"' | wc -l
echo -n "图片数 : "
curl -s "$URL" | grep -oE '
]+>' | wc -l
echo -n "懒加载率 : "
TOTAL=$(curl -s "$URL" | grep -oE '
]+>' | wc -l)
LAZY=$(curl -s "$URL" | grep -oE '
]+loading="lazy"' | wc -l)
[ "$TOTAL" -gt 0 ] && awk "BEGIN{printf "%.0f%%n", $LAZY/$TOTAL*100}" || echo "N/A"
附:优化前后实测对比
| 指标 | 优化前 | 优化后 | 变化 |
|---|---|---|---|
| 首页 HTML | 198 KB | 78 KB | ↓ 61% |
| CSS 请求数 | 14 个 | 3 个 | ↓ 79% |
| 首屏图片 | 4.2 MB | 380 KB | ↓ 91% |
| TTFB | 1.2s | 0.4s | ↓ 67% |
| LCP | 4.8s | 1.9s | ↓ 60% |
附:检查清单
- 所有图片都有
loading="lazy"(首屏第一张除外) - 图片用 WebP 格式,且宽度不超过容器宽度
- CSS/JS 已合并压缩
- 开启了页面缓存
- 数据库查询 < 60 次
- 首屏没有阻塞渲染的外部字体
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容