WordPress 变慢?用 Query Monitor 定位真实瓶颈
摘要
先说结论:WordPress 变慢有且只有三个来源——PHP 执行慢、数据库查询多、前端资源重。凭感觉删插件是瞎猜;装一个 Query Monitor,5 分钟就能看出该修哪里。 第 0 步:先量出基线,别凭感觉 用 Chrome Ligh
先说结论:WordPress 变慢有且只有三个来源——PHP 执行慢、数据库查询多、前端资源重。凭感觉删插件是瞎猜;装一个 Query Monitor,5 分钟就能看出该修哪里。
第 0 步:先量出基线,别凭感觉
- 用 Chrome Lighthouse 或 PageSpeed 测一次首页与文章页,记下 TTFB 和总加载时间。
- 命令行测 TTFB:
curl -o /dev/null -s -w '%{time_starttransfer}\n' 你的网址 - 基线数据是后面判断「到底优化了没有」的唯一依据。
判断口径:TTFB < 200ms 正常;200–600ms 有优化空间;> 1s 基本是 PHP 或数据库问题,不是图片问题。
装 Query Monitor(只在登录状态下生效,不影响访客)
后台搜索安装启用后,前台页面底部会出现一个黑色工具条,这就是它的入口。重点看四块:
| 面板 | 看什么 | 多少算正常 |
|---|---|---|
| Queries | 总查询数、慢查询、按来源分组 | < 50 条,单条 < 50ms |
| Hooks | 页面执行了多少钩子回调 | < 1000 且无超长钩子 |
| HTTP API | 外部请求次数与耗时 | 越少越好,> 3 次要警惕 |
| Timing | PHP 总耗时 | < 300ms |
瓶颈一:数据库查询过多(Queries 面板)
如果总查询数超过 100,看「按调用者分组」那一栏,它会直接告诉你是哪个插件、哪个主题函数在发查询。常见元凶:
- 相关文章插件:每篇调一次查询,列表页 × 10 条 = 10 次。
- 浏览量统计:每次访问写一次数据库,高并发时是灾难。
- 面包屑、标签云、随机文章:看似小,但在列表页重复执行。
处理思路:能关就关,不能关就加对象缓存(Redis)或静态化。
另一个高频问题是「慢查询」——Query Monitor 会把超过阈值的查询标红。看到 SELECT ... WHERE meta_value = ... 就要注意,这是 postmeta 表没有索引导致的,数据量一大必然拖慢。
瓶颈二:外部 HTTP 请求卡住页面(HTTP API 面板)
这个最隐蔽。WordPress 的很多功能(字体、验证码、更新检查、统计、地图)会在页面渲染时同步请求外部地址。如果对方响应慢或超时,你的页面就跟着等。
- 看 HTTP API 面板里的耗时,有单条超过 500ms 的立即处理。
- 能改异步的就异步,能本地化的就本地化(比如把 Google 字体下载到本站)。
- 实在要保留外部请求,给个短超时,别用默认值。
瓶颈三:PHP 执行慢(Timing 面板)
查询不多但 PHP 耗时高,通常是:
- PHP 版本低:7.4 到 8.1 一般能快 20%–40%,这是最高性价比的一次操作。
- OPcache 没开:面板里确认
opcache.enable为 On。 - 内存上限太小导致频繁 GC:
WP_MEMORY_LIMIT提到 256M 试试。
瓶颈四:前端资源(不属于 PHP 层,但影响最大)
PHP 已经很快、页面还是慢,就转向前端:
- 图片没压缩、没转 WebP,几张 2MB 的图能毁掉一切优化。
- 插件无差别加载 CSS/JS:用一个资源管理插件按页面关闭不用的。
- 字体图标库整包引入,实际只用 3 个图标。
一套可复制的排查顺序
- 测 TTFB,判断是服务端还是前端问题。
- TTFB 高 → 开 Query Monitor 看 Queries 与 Timing。
- 查询多 → 找具体插件,能关就关。
- PHP 慢 → 升版本、开 OPcache、加内存。
- TTFB 正常 → 转前端,压图片、减请求、加缓存。
不要同时改五样东西再测,那样即使变快了也不知道是哪一步起了作用。每次只改一项,改完测一次。
2026年10月22日 10:40
前后30天 · 点日期看归档
9月22日
9月23日
9月24日
9月25日
9月26日
9月27日
9月28日
9月29日
9月30日
10月1日
10月2日
10月3日
10月4日
10月5日
10月6日
10月7日
10月8日
10月9日
10月10日
10月11日
10月12日
10月13日
10月14日
10月15日
10月16日
10月17日
10月18日
10月19日
10月20日
10月21日
10月22日
10月23日
10月24日
10月25日
10月26日
10月27日
10月28日
10月29日
10月30日
10月31日
11月1日
11月2日
11月3日
11月4日
11月5日
11月6日
11月7日
11月8日
11月9日
11月10日
11月11日
11月12日
11月13日
11月14日
11月15日
11月16日
11月17日
11月18日
11月19日
11月20日
11月21日