PHP性能优化实战2026|让你的网站速度翻倍

上周帮朋友优化了一个 WordPress 站,首页加载从 2.8 秒干到 0.6 秒。其实没做什么特别的事,就是几个常规优化步骤。记录一下。

先测一下现在的速度

优化之前先有个基准,不然不知道改了之后有没有效果。

几个常用的基准测试工具:

工具用途推荐度
wrkHTTP 压力测试,测吞吐量⭐⭐⭐⭐⭐
ab(ApacheBench)简单的并发测试⭐⭐⭐
k6可编程的压力测试⭐⭐⭐⭐
Blackfire.ioPHP 性能分析,定位慢代码⭐⭐⭐⭐⭐
Xdebug + Webgrind本地开发时的性能分析⭐⭐⭐⭐

先跑个 wrk 看看基准:

# 安装 wrk
apt install wrk -y

# 测试:12 线程,400 并发,持续 30 秒
wrk -t12 -c400 -d30s http://你的域名/

我朋友那个站优化前的数据:

Running 30s test @ http://xuyunblog.com/
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   850ms   120ms    1.2s     85%
    Req/Sec    38.5     12.3    62.0     78%
  13,862 requests in 30.05s

每秒处理 38.5 个请求,平均延迟 850ms。对于一个博客来说确实不太行。

第一步:开启 OPcache(立竿见影)

OPcache 是 PHP 自带的字节码缓存。没开的话,每次请求 PHP 都要重新编译代码,浪费大量时间。

确认有没有开

php -i | grep "opcache.enable"
# 输出 opcache.enable => On => On 就是开了

大多数宝塔面板默认会开,但配置不一定最优。

推荐配置

编辑 php.ini(宝塔面板:软件商店 → PHP → 设置 → 配置文件):

[opcache]
opcache.enable=1
opcache.memory_consumption=256        ; 默认 128,调到 256
opcache.interned_strings_buffer=32    ; 默认 8,调到 32
opcache.max_accelerated_files=20000   ; 默认 10000,调到 20000
opcache.validate_timestamps=0         ; 生产环境设为 0,更新代码后手动刷新
opcache.fast_shutdown=1
opcache.enable_cli=1

效果(实测):

配置状态Req/Sec平均延迟
没开 OPcache221.1s
默认配置 OPcache45650ms
优化配置 OPcache62420ms

只改了这个配置,每秒请求数就从 22 翻倍到 62

第二步:升级 PHP 版本(白嫖性能)

PHP 8.x 相比 7.x 性能提升明显,8.4 又有改进。

PHP 版本基准测试(相对值)JIT 支持状态(2026)
7.4100%已停止维护
8.0~105%已停止维护
8.1~110%安全维护
8.2~115%活跃维护
8.3~120%改进活跃维护
8.4~125%改进最新稳定版

从 7.4 升到 8.4,同等条件下性能提升 25%。而且升级操作很简单——宝塔面板里选个新版本,点保存,等一两分钟就切换了。

升级前注意:先确认你的程序和插件兼容新版 PHP。不兼容的可以先在测试环境跑。

第三步:数据库优化

数据库慢是 PHP 网站最常见的瓶颈。

慢查询日志

先打开慢查询日志,看看哪些 SQL 语句在拖后腿:

# my.cnf / mariadb.conf
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1    ; 超过 1 秒的才记录

跑一段时间然后看日志:

cat /var/log/mysql/slow.log | grep "SELECT" | head -20

给常用字段加索引

最常见的问题——没加索引导致全表扫描。

-- 看看哪些表缺少索引
SELECT table_schema, table_name, index_length
FROM information_schema.statistics
WHERE table_schema = 'wordpress'
ORDER BY index_length DESC;

-- 给常用的查询字段加索引
ALTER TABLE wp_posts ADD INDEX idx_post_status (post_status, post_date);
ALTER TABLE wp_postmeta ADD INDEX idx_meta_key (meta_key);

加个 Redis 缓存

WordPress + Redis 缓存的组合现在非常成熟了。

# 安装 Redis
apt install redis-server -y

# 安装 PHP Redis 扩展(宝塔面板:软件商店 → PHP → 安装扩展 → redis)

# WordPress 装 Redis Object Cache 插件

Redis 开启后的效果(同一个 WordPress 站):

优化阶段Req/Sec平均延迟数据库查询/页面
原始状态221.1s45-60 次
+ OPcache62420ms45-60 次
+ PHP 8.478340ms45-60 次
+ Redis 缓存156165ms8-15 次
+ 页面缓存32075ms0-2 次

第四步:页面级缓存

PHP 最大的性能消耗是每次请求都要查数据库、跑模板。页面缓存直接把最终 HTML 存下来,后续请求直接返回 HTML。

方案对比

缓存方案适合场景效果复杂度
WordPress 缓存插件(WP Super Cache / LiteSpeed Cache)WordPress 站效果极好
Nginx FastCGI Cache任何 PHP 项目效果极好
Varnish多站点、复杂场景效果最好
Cloudflare 边缘缓存静态+缓存页面全球加速

Nginx FastCGI Cache 配置示例:

# 在 http 块中定义缓存区域
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=MYAPP:10m max_size=1g inactive=60m;

server {
    # ... 其他配置

    location ~ \.php$ {
        fastcgi_cache MYAPP;
        fastcgi_cache_valid 200 30m;        # 200 状态码缓存 30 分钟
        fastcgi_cache_valid 404 1m;
        fastcgi_cache_use_stale error timeout;
        add_header X-Cache $upstream_cache_status;  # 方便调试
    }
}

调试的时候看响应头里的 X-Cache 字段:

  • HIT:命中缓存 ✅
  • MISS:未命中,回源 PHP ❌
  • BYPASS:绕过缓存(登录用户等) ℹ️

第五步:其他优化项

启用 Gzip / Brotli 压缩

# Gzip
gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;
gzip_min_length 1000;

# Brotli(比 Gzip 压缩率更高)
# 需要先安装 ngx_brotli 模块
brotli on;
brotli_comp_level 6;
brotli_types text/css application/javascript application/json image/svg+xml;

图片优化

  • 用 WebP 格式(比 JPEG 小 30%+)
  • WordPress 装 Imagify 或 ShortPixel 自动转换
  • 懒加载(loading="lazy"

调整 PHP-FPM 进程数

# php-fpm.conf
pm = dynamic
pm.max_children = 50          ; 根据内存调整,每个进程约 50-80MB
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 20
pm.max_requests = 500         ; 防内存泄漏

算一下:2G 内存的服务器,PHP-FPM 大概能跑 2048 / 70 ≈ 29 个进程。设 20-25 比较安全。

优化效果汇总

跑完上面所有步骤,我朋友那个站的数据:

Running 30s test @ http://xuyunblog.com/
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    75ms    25ms    180ms     82%
    Req/Sec   320.5     45.2   410.0     79%
  115,380 requests in 30.02s

从 38 Req/s 到 320 Req/s,提升了 8.3 倍。

首页加载时间从 2.8s 降到 0.3s 左右。

常见问题

OPcache 设了 validate_timestamps=0,更新代码后怎么办?

# 重载 PHP-FPM 就刷新 OPcache 了
systemctl reload php8.4-fpm

或者在 WordPress 里装个插件,后台点一下就能刷新。

缓存导致内容不更新?

清除缓存就行。Nginx:删 /var/cache/nginx/ 下的文件。WordPress:缓存插件里点「清除全部缓存」。

优化后内存不够用了?

减少 PHP-FPM 的 pm.max_children,或者关掉一些不必要的服务。Redis 也可以限制内存:redis-cli CONFIG SET maxmemory 256mb


叙云博客后续还会分享更多实战优化案例。有具体的性能问题欢迎留言。

©版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容