PHP 应用性能优化:完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言



PHP 仍然是 Web 开发中最流行的语言之一:WordPress、Laravel、Symfony 以及数百万个网站都运行在它之上。然而,随着负载的增长,PHP 应用程序的性能可能成为瓶颈。页面加载缓慢不仅会降低用户体验,还会降低在搜索引擎结果中的排名(Google 会考虑 Core Web Vitals)。



在本文中,我们将探讨经过验证的 PHP 优化方法,这些方法可以帮助您在不完全重写代码的情况下加速应用程序。您将了解缓存、解释器配置、数据库优化和性能分析。



1. 缓存:迈向速度的第一步



缓存是减少响应时间最有效的方法。与其每次都执行繁重的操作,不如保存结果并从缓存中提供。



1.1. OpCache (PHP 7/8)



PHP 是一种解释型语言:每次请求时,它都会将脚本编译成操作码(字节码)。OpCache 将编译后的操作码保存在 RAM 中,从而避免重复编译。这可以带来 30-50% 的性能提升。



如何启用: 打开 php.ini 并确保参数已配置:



opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=10000opcache.revalidate_freq=2


对于生产环境,设置 opcache.revalidate_freq=0 并在部署时手动刷新缓存。



1.2. 数据缓存 (Redis / Memcached)



如果您的应用程序执行昂贵的数据库查询或外部 API 调用,请使用内存存储。



使用 Redis 的示例:



<?php$redis = new Redis();$redis->connect('127.0.0.1', 6379);

$cacheKey = 'user_profile_' . $userId;$profile = $redis->get($cacheKey);

if (!$profile) { // 昂贵的数据库查询 $profile = getUserProfileFromDB($userId); $redis->setex($cacheKey, 3600, serialize($profile)); // TTL 1 小时}

$profile = unserialize($profile);


1.3. HTML 缓存 (全页缓存)



对于静态或很少更新的页面(博客、落地页),您可以缓存完整的 HTML 输出。在 Laravel 中,这通过 middleware 实现;在 Symfony 中,通过 HTTP cache 实现。



2. SQL 查询和数据库优化



PHP 应用程序最常见的瓶颈是数据库。慢查询会消耗服务器资源。



2.1. 使用索引



确保参与 WHERE、JOIN 和 ORDER BY 的列上有索引。您可以通过 EXPLAIN SELECT ... 进行检查。



糟糕的查询(无索引):



SELECT * FROM orders WHERE status = 'pending';


好的查询(有索引):



CREATE INDEX idx_orders_status ON orders (status);SELECT * FROM orders WHERE status = 'pending';


2.2. 避免 N+1 查询



这是 ORM 的经典错误:在循环中为每条记录获取数据。



问题 (Laravel Eloquent):



$users = User::all();foreach ($users as $user) {    echo $user->profile->bio; // 每次都执行新查询}


解决方案(预加载):



$users = User::with('profile')->get();foreach ($users as $user) {    echo $user->profile->bio; // 一次查询}


2.3. 使用分页代替大偏移量的 LIMIT



当使用 LIMIT 10 OFFSET 100000 时,MySQL 仍然需要扫描 100010 行。请使用基于游标的分页(按索引查找):



SELECT * FROM posts WHERE id > $lastId ORDER BY id ASC LIMIT 10;


3. 代码和架构优化



即使拥有理想的数据库和缓存,糟糕的代码仍

博客

书籍推荐