VPS优惠推送
分享好玩教程

WordPress 性能优化(一):你的站到底慢在哪

不测量就优化,等于闭眼开车。

这是「WordPress 性能优化实录」系列的第一篇。整个系列五篇正文,但在动手之前请先把这篇看完 —— 因为它决定了你后面所有优化到底有没有用。

我见过太多人(包括我自己)一上来就装缓存插件、换轻量主题、升级 VPS,折腾一圈发现「好像快了一点,但不知道是不是错觉」。原因很简单:没测过,就不知道瓶颈在哪;不知道瓶颈,改动就是碰运气。

1、一个页面请求,要经过好几层

访客点开一个页面,请求依次经过:

  • 浏览器(DNS 解析 → TCP 建连 → TLS 握手)
  • CDN / 边缘节点(有缓存就直接返回,压根不回源)
  • 你的服务器(nginx)
  • 页面缓存(命中就发静态 HTML,否则交给 PHP)
  • PHP + 数据库(现场渲染)

任何一层慢,表现出来都是「网页打开慢」,但要改的东西完全不同:

一个页面请求的时间分布:命中缓存 0.28ms,掉到 PHP 就是 150~300ms

这张图是整个系列的地基:请求停得越靠上,就越快。所以第一步不是优化,而是搞清楚自己的请求停在哪一层。

2、先看三个数字

不用一上来就上 Lighthouse,先看这三个就够定位了:

数字 是什么 怎么算好
TTFB(首字节时间) 从发起请求到收到第一个字节 静态页 < 100ms;缓存页 < 300ms;超过 1 秒说明后端或跨境有问题
页面总字节数 HTML + CSS + JS + 图片 文章页 < 500KB 算轻;超过 2MB 基本都是图片没优化
请求数 打开一个页面发了多少个请求 < 50 个算健康;上百个通常是插件、统计代码、字体堆出来的

这三个数字能立刻告诉你「慢在哪一类」:TTFB 大 → 看后端和网络;字节数大 → 看图片;请求数多 → 看插件和前端。

3、测法一:一条 curl 命令(最快)

在任意一台能上网的机器上执行:

curl -s -o /dev/null -w '首字节 %{time_starttransfer}sn' https://你的域名/

至少测 5 次,取中位数。如果想看清慢在哪一段,把它拆开:

curl -s -o /dev/null -w 'DNS %{time_namelookup}s | TCP %{time_connect}s | TLS %{time_appconnect}s | 首字节 %{time_starttransfer}sn' https://你的域名/
一条 curl 命令就能量出首字节,还能拆开看到底慢在哪一段

怎么看这组数:

  • DNS 很大(超过 100ms)→ 换解析服务商,或者交给 CDN 解析;
  • TCP / TLS 大 → 物理距离或线路问题,不是你在服务器上能优化掉的;
  • 首字节比 TLS 完成大很多(比如 TLS 0.5s、首字节 1.5s)→ 后端在干活,去看页面缓存和 PHP。

4、测法二:浏览器开发者工具(最直观)

按 F12 → Network → 勾上「Disable cache」→ 刷新页面,重点看两处:

  • 瀑布图里第一个文档请求:它的「Waiting for server response」就是服务端耗时;
  • 最下面那一行:Load 时间、总字节数、请求数。

如果第一个文档请求等了几百毫秒 → 后端或缓存有问题;如果文档请求很快、但图片一个个慢慢加载 → 是资源体积问题,去第四篇。

DevTools 的瀑布图里,红色那段就是「等服务器响应」

5、测法三:上服务器看(找真凶)

如果你是 VPS 自建,只看外部数字不够,还要去服务器上确认几件事:

  • 页面缓存到底有没有生效:数一下缓存目录里的文件数量,和你的文章数比一比(我改之前是 114 篇文章只有 11 个静态文件,等于没缓存);
  • PHP 是不是在排队:看 PHP-FPM 的 status 页里的 listen queue 和 active processes;
  • 有没有慢查询:打开 MySQL 慢查询日志,看 p95 / p99 耗时;
  • CDN 命中率如何:看响应头里的 cf-cache-status,是 HIT 还是 DYNAMIC / MISS。
外部数字只能说明慢,服务器上这四个地方才找得到原因

这四个点后面会逐个展开,这一篇你只要知道「该去哪看」就够了。

6、国内和国外,必须分开测

这一点被绝大多数教程忽略:同一个站,国内和国外的体验可能差五倍以上。

我实测过(国内网络访问一个套了 Cloudflare 的站):

指标 国内实测
TCP 建连(一个来回) 263 ms
TLS 握手完成 525 ms
首字节 TTFB 817 ms(最差一次到 10 秒)
国内首字节 817ms,服务器处理只占不到 1%

而服务器自己处理一个请求只要 0.3~3 毫秒。也就是说:国内访客等的这 800ms 里,你的服务器只贡献了不到 1%。

所以测量要分两条线:用国内网络测一次,再用国外网络(或直接测源站)测一次。两边都慢 → 后端问题;只有国内慢 → 跨境和线路问题,这时候再怎么优化服务器都没用。

7、测完,对号入座

现象 最可能的原因 该看哪一篇
首字节 > 500ms,但 CDN 显示 HIT CDN 节点离你太远 / 线路差 第二篇
首字节慢,且 cf-cache-status 是 DYNAMIC / MISS HTML 没被缓存,每次都回源 第二、三篇
首字节正常,但页面要 3 秒才加载完 图片没优化 / 资源太大 / JS 阻塞渲染 第四篇
平时快,偶尔很慢 缓存过期 / PHP 排队 / 数据库抖动 第三篇
只有国内用户喊慢 跨境延迟,和代码优化无关 第二篇(方案 D)

对号入座之后,你才知道后面四篇里哪一篇对你真的有用 —— 而不是五篇全看一遍、每个插件都装一遍。

8、下一篇

下一篇讲最常见的那个答案:CDN。但会先说清一件事 —— CDN 只是「动静分离」的其中一种做法,还有不套 CDN 也能明显变快的路子。

(本篇为系列第一篇。文中数据来自一台 2 核 VPS 的实测,环境:Debian 13 + nginx 1.26 + PHP 8.4 + MariaDB + Redis。)

赞(0)
未经允许不得转载:F12笔记 » WordPress 性能优化(一):你的站到底慢在哪

评论 抢沙发