5个提高 PHP 性能的技巧

288 阅读3分钟

PHP 性能优化是一个系统性的问题,但有一些简单且高效的方法可以立竿见影地提升你的 PHP 应用速度。以下是5 个提高 PHP 性能的技巧,无论是 Laravel、ThinkPHP 还是纯 PHP 项目都适用。

1. 启用 OPcache,加速 PHP 代码执行

❌ 问题

PHP 代码每次运行都会重新解析、编译、执行,导致不必要的 CPU 消耗。

✅ 解决方案

启用 OPcache,让 PHP 代码编译后的字节码缓存起来,避免重复编译。

⚙ 配置方法

php.ini 里启用 OPcache(一般 PHP 7+ 默认已开启):

ini
复制编辑
opcache.enable=1
opcache.memory_consumption=128  ; OPcache 使用的内存(默认 64MB,可调整)
opcache.max_accelerated_files=10000  ; 允许缓存的文件数量
opcache.validate_timestamps=1  ; 是否检查文件变动,生产环境可设为 0 提高性能

然后重启 PHP-FPM:

bash
复制编辑
systemctl restart php-fpm

📌 优化效果:能减少 30%~50% 的 CPU 开销,大幅加快 PHP 代码执行速度。


2. 使用合适的 PHP 版本(尽量升级到 PHP 8.x)

❌ 问题

很多老项目仍在使用 PHP 7.x 或更低版本,而 PHP 8 在性能上有很大优化。

✅ 解决方案

升级到 PHP 8.1 或 8.2,新版本带来 JIT(Just-In-Time 编译)、性能优化和新特性。

⚙ PHP 8 性能提升示例

php
复制编辑
// PHP 8 JIT 编译优化后,数学计算大幅加快
function compute() {
    $sum = 0;
    for ($i = 0; $i < 1000000; $i++) {
        $sum += sqrt($i);
    }
    return $sum;
}

📌 PHP 8 相比 PHP 7,性能提升 10%~30%,相比 PHP 5.6 快了近 3 倍!


3. 使用 Redis/Memcached 代替数据库查询

❌ 问题

每次从数据库查询数据都会消耗大量时间,尤其是高并发场景下,数据库会成为瓶颈。

✅ 解决方案

使用 Redis 或 Memcached 做缓存,减少数据库查询压力,提高访问速度。

⚙ 示例(Laravel + Redis 缓存)

php
复制编辑
// 先尝试从 Redis 获取数据
$users = Cache::remember('users_list', 60, function () {
    return DB::table('users')->get();
});

📌 减少重复查询,数据库压力降低 50% 以上,页面响应速度显著提升。


4. 使用异步任务队列(Queue)处理耗时操作

❌ 问题

像邮件发送、图片处理、API 调用等任务,如果同步执行,会导致页面加载变慢。

✅ 解决方案

使用 Laravel Queue 或 Swoole 进行异步处理,让这些任务后台执行,不影响用户体验。

⚙ 示例(Laravel 队列异步处理邮件)

php
复制编辑
// 发送邮件任务
Mail::to($user)->queue(new WelcomeEmail($user));

然后用 Supervisor 管理 Laravel 队列:

bash
复制编辑
php artisan queue:work --tries=3 --daemon

📌 主线程响应速度提升 50%+,大幅优化用户体验。


5. 避免 N+1 查询问题,优化数据库查询

❌ 问题

在 Laravel、ThinkPHP 里,如果不注意,可能会发生N+1 查询,导致数据库压力暴增。

✅ 解决方案

使用 with() 预加载,减少查询次数。

⚙ 示例

错误示例(N+1 查询问题,执行 101 次 SQL)

php
复制编辑
$users = User::all();
foreach ($users as $user) {
    echo $user->profile->bio; // 这里会触发 N+1 查询
}

优化示例(只执行 2 次 SQL 查询)

php
复制编辑
$users = User::with('profile')->get(); // 预加载 profile,减少查询次数
foreach ($users as $user) {
    echo $user->profile->bio;
}

📌 查询次数从 101 次减少到 2 次,数据库压力大幅降低!


总结

优化技巧效果
开启 OPcache代码执行速度提升 30%~50%
升级 PHP 版本PHP 8 比 PHP 7 快 10%~30%
使用 Redis 缓存降低数据库查询 50%+
队列处理耗时任务页面加载时间减少 50%+
优化数据库查询SQL 查询次数减少 90%+

这些优化方法简单易行,而且立竿见影。你可以先测试一下 OPcache 和 Redis 缓存,看看效果如何!以上只是个人随意分享,不喜勿喷!!!如果你有具体的 PHP 性能瓶颈,欢迎交流 🚀