WordPress性能优化需协同PHP-FPM、OPcache与页面缓存三层:FPM用dynamic模式合理配置进程数,OPcache匹配项目规模并关闭生产环境时间戳校验,页面缓存首选LiteSpeed Cache并精细设规则,三者缺一不可且须逐一验证生效。

WordPress性能优化不是堆插件,而是分层治理:PHP执行层靠FPM+OPcache压底,服务端响应层靠页面缓存兜底。三者不协同,缓存再快也白搭;任一环节没调好,其他优化都会打折扣。
PHP-FPM:选对模式,调准进程数
dynamic是绝大多数WordPress站点的首选模式,但默认配置严重偏保守——高峰期频繁fork子进程,CPU飙升、响应延迟拉长。static仅适合并发稳定、内存富余的内部API类服务;ondemand适合极低流量场景,日常不推荐。
- 以2GB内存服务器为例,建议初调值:pm.start_servers = 6、pm.min_spare_servers = 4、pm.max_spare_servers = 10、pm.max_children = 24
- 用ps aux | grep 'php-fpm:' | wc -l实时查看活跃进程数,若长期接近pm.max_children,说明进程池已打满,必须扩容
- 禁用pm.process_idle_timeout(如已启用),设为0或注释掉;设成10s之类短值会导致空闲进程被过早回收,反而增加fork开销
- 务必设置pm.max_requests = 1000–3000,防止内存泄漏累积。设为0等于放弃防护,worker进程RSS会缓慢上涨,最终触发OOM
OPcache:匹配项目规模,关闭校验时机
OPcache不是开就有效,它和PHP-FPM生命周期强耦合。缓存大小、文件数上限、时间戳验证策略,三者不匹配就会引发“缓存失效风暴”——刚缓存完就被踢出,命中率暴跌。
构建并排查Microsoft Word邮件合并及DOCX模板工作流,使用合并域、内容控件、文档属性、重复区块、数据等
- opcache.memory_consumption建议设为128MB起步,Laravel或插件繁多的WP站点可升至256MB;用opcache_get_status()观察memory_usage / max_memory_usage比值,持续高于90%需扩容
- opcache.max_accelerated_files至少设为项目PHP文件总数的1.5倍(可用find . -name "*.php" | wc -l估算),低于此值会导致高频缓存驱逐
- 生产环境必须设opcache.validate_timestamps = 0,但前提是部署流程包含FPM重载或opcache_reset();开发环境保持=1并配opcache.revalidate_freq = 2
- 启用opcache.fast_shutdown = 1,加快worker进程退出速度;确认opcache.enable_cli = 0(CLI下无需开启,避免干扰Composer等命令)
页面缓存:LiteSpeed Cache优先,规则要细
如果你用的是LiteSpeed Web Server或OpenLiteSpeed,LiteSpeed Cache是唯一值得优先考虑的页面缓存插件。它能绕过PHP执行直接返回静态HTML,TTFB可从700ms降至50ms以内。其他缓存插件在Nginx/Apache下效果打折,且易与主题、插件冲突。
立即学习“PHP免费学习笔记(深入)”;
- 开启「Public Cache」和「Private Cache」,但排除/wp-admin/、/wp-login.php、/cart/、/checkout/等动态路径
- 浏览器缓存规则中,CSS/JS设为1年,HTML设为10分钟(防内容更新延迟),图片视情况设为1周~3个月
- 启用Crawler预缓存,设定爬取深度≤3、间隔≥30秒,避免压垮数据库;首次启用后手动触发一次全站爬取
- 对象缓存务必接Redis(非MySQL),并在LiteSpeed Cache后台开启「Object Cache」选项,减少重复数据库查询
联动检查:三者是否真正生效
光配不验等于没做。每个环节都要有验证手段:
- FPM:访问/status?full(需Nginx透传),看active processes是否在合理区间,slow requests是否归零
- OPcache:建一个info.php放,对比请求前后数值变化
- 页面缓存:用Chrome无痕模式访问首页,查看Response Headers中是否有x-litespeed-cache: hit,TTFB是否稳定在100ms内
- 关键提醒:修改FPM或OPcache配置后,必须执行sudo systemctl reload php*-fpm;改LiteSpeed Cache设置后,点「Purge All」再测试


















