PHP应用性能优化:技巧与示例

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

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

开始课程

引言

PHP 应用性能是任何 Web 项目成功的关键因素之一。缓慢的网站不仅会使用户流失,还会对 SEO 排名产生负面影响。本文将介绍优化 PHP 代码和服务器基础设施的主要方法,帮助加速你的应用程序。

优化并非一次性操作,而是一个持续的过程。让我们从最有效、能带来最大性能提升的技术开始。



1. 数据缓存

缓存是加速 PHP 应用最强大的工具之一。不必每次都从头生成响应,你可以保存结果并从缓存中直接提供。



1.1. 内存缓存(Redis/Memcached)

使用 Redis 或 Memcached 等内存缓存系统。它们非常适合存储复杂查询的结果、会话以及频繁请求的数据。

<?php// 使用 Redis 进行缓存的示例$redis = new Redis();$redis->connect('127.0.0.1', 6379);

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

if ($profile === false) { // 数据不在缓存中 — 执行繁重查询 $profile = getUserProfileFromDatabase($userId); $redis->setex($cacheKey, 3600, serialize($profile)); // 缓存1小时}

$profile = unserialize($profile);?>


1.2. HTML 输出缓存(全页面缓存)

对于静态页面或很少更改的页面,可以使用已生成 HTML 的缓存。这可以通过 Varnish 或流行框架(例如 Symfony HTTP Cache)的内置缓存来实现。



2. 数据库优化

数据库常常成为瓶颈。优化查询和数据库结构可以显著提升速度。



2.1. 使用索引

确保所有参与 WHERE、JOIN 和 ORDER BY 条件的列都已建立索引。这可以将搜索速度提升数十倍。



2.2. 使用 EXPLAIN 优化查询

在执行复杂查询之前,使用 EXPLAIN 命令来了解 MySQL 如何执行它。留意 "Using filesort" 或 "Using temporary" —— 这些都是查询非最优的标志。

<?php// 糟糕:N+1 查询$users = $db->query("SELECT * FROM users");foreach ($users as $user) {    $posts = $db->query("SELECT * FROM posts WHERE user_id = " . $user['id']);    // ...}

// 优良:使用 JOIN 的单次查询$users = $db->query(" SELECT u.*, p.title as post_title FROM users u LEFT JOIN posts p ON p.user_id = u.id");?>


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

使用带有大偏移量(OFFSET)的 LIMIT 会迫使数据库扫描大量行。请使用基于游标的分页方式(WHERE id > last_id)。

<?php// 糟糕:LIMIT 100000, 20$stmt = $db->query("SELECT * FROM articles ORDER BY id LIMIT 100000, 20");

// 优良:基于游标的分页$lastId = $_GET['last_id'] ?? 0;$stmt = $db->query("SELECT * FROM articles WHERE id > $lastId ORDER BY id LIMIT 20");?>


3. 使用 OPcache 与类自动加载

PHP 是一种解释型语言,每个请求都需要编译脚本。OPcache 通过在内存中存储编译后的代码来解决此问题。



3.1. 配置 OPcache

确保 OPcache 已启用并正确配置。以下是适用于大多数项目的优化参数:

; php.iniopcache.enable=1opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=10000opcache.revalidate_freq=2opcache.fast_shutdown=1


3.2. 正确的类自动加载

使用 Composer 进行类自动加载。这样可以只加载需要的类,从而

博客

书籍推荐