本文约 3,548 字,预计阅读 9 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:买了 WP Rocket,勾了”全部优化”然后前台崩了
WP Rocket 是最好卖的 WordPress 付费缓存插件,界面做得像开关面板一样友好,于是很多人装完第一件事就是把所有勾选项全开:Minify、Combine、Defer、Delay、LazyLoad、Remove Unused CSS、CDN、Database Cleanup 一起上。结果前台 CSS 没加载、轮播图不动、WooCommerce 加购按钮点了没反应。
问题不在插件,在于这些开关之间是有依赖和风险等级的。有的开关(页面缓存)几乎零风险且收益最大;有的(合并 CSS/JS)在 HTTP/2 时代已经不再推荐;有的(延迟执行 JS)收益高但必须配排除清单。本文按”收益/风险”给每一项定性,让你知道哪些必须开、哪些要看情况、哪些干脆别碰。
原理分析:开关背后的三种机制
WP Rocket 做的三件事可以按机制归类:
第一类是缓存:把动态生成的 HTML 存成静态文件,后续请求直接由 Web 服务器返回,连 PHP 都不启动。这是收益最大的一项,风险最低。核心参数只有两个:缓存有效期(Cache Lifespan)与是否区分移动端/登录用户。
第二类是文件优化:压缩、合并、延迟加载 CSS/JS。收益中等,风险偏高。合并(Combine)在 HTTP/2 多路复用下已无必要,反而会因为任一小文件变更导致整个合并文件失效重下;延迟执行 JS(Delay JS)收益明显(把第三方脚本推迟到用户交互后再加载),但会打破所有依赖同步加载的内联脚本。
第三类是清理与卸载:数据库清理、心跳控制、CDN 改写。收益视站点而定,风险可控但不可逆(数据库清理)。
下表给出关键项的定性:
| 板块 | 选项 | 推荐值 | 风险 |
|---|---|---|---|
| Cache | Mobile Cache | 开(有独立移动模板时) | 低 |
| Cache | User Cache | 关(会员站才开) | 中 |
| Cache | Cache Lifespan | 10 小时 | 低 |
| File Optimization | Minify CSS/JS | 开 | 低 |
| File Optimization | Combine CSS files | 关(HTTP/2 下无收益) | 中 |
| File Optimization | Optimize CSS delivery | 开(Remove Unused CSS 需测试) | 高 |
| File Optimization | Delay JS execution | 开(必须配排除) | 高 |
| Media | LazyLoad images/iframes | 开 | 低 |
| Preload | Preload links on hover | 开 | 低 |
| Preload | Sitemap preloading | 开(小站) | 中 |
保姆级实操
第一步:基础缓存设置
WP Rocket → Cache:
- Enable caching for logged-in users:关(会员站除外);
- Cache Lifespan:填
10小时; - 若站点有 AMP 或独立移动主题,打开 Mobile Cache。
第二步:文件优化的正确组合
WP Rocket → File Optimization → CSS Files:
- Minify CSS:开;
- Combine CSS files:关(HTTP/2 下反而拖慢);
- Optimize CSS delivery:开,”Remove Unused CSS”先关,跑一周稳定后再开并前台逐页核对。
JS Files:
- Minify JS / Load JS deferred:开;
- Delay JS execution:开,然后在下面的排除框里填必要脚本。
第三步:用过滤器补排除项(比界面填更可靠)
界面里的排除框适合临时填,长期维护建议写进子主题或功能插件:
<?php
// 延迟执行 JS 时排除:统计、广告、表单校验脚本
add_filter( 'rocket_delay_js_exclusions', function ( $excluded ) {
$excluded[] = 'gtag';
$excluded[] = 'googletagmanager';
$excluded[] = '/wp-includes/js/jquery/jquery.min.js';
$excluded[] = 'wpcf7';
return $excluded;
} );
// 合并/压缩时排除指定的 CSS
add_filter( 'rocket_exclude_css', function ( $excluded ) {
$excluded[] = '/wp-content/plugins/elementor/assets/css/frontend.min.css';
return $excluded;
} );
// 特定 URI 不缓存(购物车、结算、我的账户)
add_filter( 'rocket_cache_reject_uri', function ( $uris ) {
$uris[] = '/cart(.*)';
$uris[] = '/checkout(.*)';
$uris[] = '/my-account(.*)';
return $uris;
} );
第四步:媒体与预加载
Media:LazyLoad for images、iframes、YouTube 缩略图替换全开。
Preload:
- Activate Preloading:开;
- Preload Links(鼠标悬停预取):开;
- Sitemap Preloading:站点 URL 数少于 5000 才开,否则会持续消耗资源。
第五步:数据库清理设为手动
WP Rocket → Database:把”Automatic cleanup”关掉,改为手动点 Clean。自动清理在文章量大的站点上可能造成锁表。
第六步:用命令行验证缓存是否真的命中
for i in 1 2 3; do
curl -sI https://mimangfei.com/ | grep -Ei '^(HTTP/|x-rocket|cache-control|age:)'
echo "---"
done
看到 x-rocket-nginx-serving-static: HIT 或类似头,且第二次请求明显更快,说明缓存生效。清缓存可以用:
wp rocket clean --confirm
wp rocket preload --confirm
常见踩坑
- 开了 Combine CSS 导致布局错乱。多主题/多插件的 CSS 加载顺序被打乱,HTTP/2 下没必要开。
- Delay JS 把联系表单弄哑。表单脚本被延后,用户点击时脚本还没加载。必须加到排除清单。
- Remove Unused CSS 把动态内容的样式删了。弹窗、Tab 切换、滑块这类需要交互后才出现的样式常被误判为”未使用”。
- 案例:一个企业站开了 Delay JS 之后,在线客服悬浮按钮消失了三天没人发现,直到客户打电话问”你们的客服窗口是不是撤了”。原因是客服脚本被延后,而触发它的内联代码在页面加载时就执行了,此时脚本尚未加载。修复是把客服脚本域名加进
rocket_delay_js_exclusions。 - Sitemap Preloading 在超大站点上持续占用资源。几万个 URL 一轮爬不完,又开始下一轮。
- 没排除 WooCommerce 的动态页。
cart、checkout、my-account必须排除,否则用户看到别人的购物车。 - 改了设置没清缓存。前台还是旧文件,误以为设置没生效。
总结
WP Rocket 的最佳配置可以概括成一句话:缓存全开、压缩开、合并不开、延迟 JS 开但必须配排除、移除未使用 CSS 谨慎开、数据库清理手动跑。配置完成后做两件事验证:用 curl -I 确认缓存命中头;逐页点一遍交互元素(表单、客服、轮播、加购)确认没有脚本被延后打断。这两步做完,插件才算真正配好。
如果你的服务器跑的是 LiteSpeed,可以看 WP Rocket 与 LiteSpeed Cache 怎么选;第三方脚本的延迟加载也可参考 Flying Scripts 延迟加载第三方脚本。
