核心原因是PHP未启用OPcache优化和静态资源无缓存头:需调大opcache.memory_consumption至128MB、max_accelerated_files至7963,并在Nginx正确location块中配置expires与Cache-Control,同时补全gzip_types包含application/json。

宝塔面板新建网站首屏慢、TTFB 高,核心原因就两个:PHP 每次都要重编译脚本,静态资源每次都要重新下载。不配 opcache 和缓存头,等于让服务器裸奔跑 PHP —— 你改一行代码,全站用户都得陪等 Zend 引擎再 parse 一遍。
为什么 opcache 开着但没效果?内存和文件数早爆了
宝塔默认开 opcache,但只给 64MB 内存和 2000 个文件上限。WordPress 加 5 个插件,光主题+插件 PHP 文件就超 3000 个;OPcache 每次满就踢旧缓存,实际命中率可能低于 30%。
- 进宝塔 → PHP 设置 → OPcache → 确保“启用”已勾选(别信后台开关,还得看配置)
- 手动编辑
/www/server/php/XX/etc/php.ini,改三处:opcache.memory_consumption = 128opcache.max_accelerated_files = 7963opcache.revalidate_freq = 60(避免开发时改完代码要等太久) - 改完必须重启 PHP(不是重载),否则
phpinfo()里看到的还是旧值
Nginx 静态资源缓存配置错位置,浏览器根本收不到 Cache-Control
很多人在宝塔「网站 > 设置 > 配置文件」里加了 expires 1y,但没注意它被套在 location ~ \.php$ 块里——JS/CSS 根本不走这个块,压根不生效。缓存头必须落在匹配静态后缀的 location 下。
- 进「网站 > 设置 > 配置文件」,找到或新增这段(别塞错块):
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2|ttf|eot)$ {<br> expires 1y;<br> add_header Cache-Control "public, immutable";<br>} - 确保该块不在
location /或location ~ \.php$内部嵌套,否则会被覆盖 - 改完点「保存」→「重载配置」,然后用
curl -I https://yoursite.com/style.css看响应头里有没有Cache-Control和Expires
gzip_types 漏了 application/json,API 接口体积翻倍拖慢 TTFB
前端调 WordPress REST API 返回的 JSON 默认不压缩,一个 200KB 的 /wp-json/wp/v2/posts 响应,不 gzip 就是裸传 200KB,TTFB 直接多出 300ms+。宝塔后台那个“Gzip 压缩”开关,只管 HTML 和基础类型,不管 JSON。
- 进「软件商店 > Nginx > 设置 > 配置修改」,在
http {块开头插入:gzip on;<br>gzip_vary on;<br>gzip_min_length 1k;<br>gzip_comp_level 6;<br>gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/json image/svg+xml;
-
application/json必须显式写上,Nginx 不认通配符 - 别用
gzip_comp_level 9,CPU 占满会导致其他请求排队,6 是实测平衡点
真正卡住首字节的,从来不是硬盘或带宽,而是 PHP 每次重编译 + 静态文件无缓存 + JSON 不压缩这三件事叠在一起。改完这三项,同一台机器的 TTFB 从 900ms 跌到 60ms 是常态——但前提是,你得确认 curl -I 真收到了 Content-Encoding: gzip 和 Cache-Control,而不是只点了“保存”就去刷新网页。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











