在 Ubuntu 下对 PHP 代码进行优化,可以从多个方面入手,包括代码质量、性能调优、环境配置等。以下是一些详细的建议和步骤:
确保使用最新的 PHP 版本,因为新版本通常包含性能改进和新的优化特性。Ubuntu 20.04 LTS 默认支持 PHP 7.4,建议升级到 PHP 8.x。
升级 PHP 版本的步骤:
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.0 php8.0-cli php8.0-fpm php8.0-mysql php8.0-zip php8.0-gd php8.0-curl php8.0-mbstring php8.0-xml php8.0-bcmath
遵循 PHP-FIG(PHP Framework Interop Group)制定的编码规范,如 PSR-1 和 PSR-2,可以提高代码的可读性和可维护性。
利用 PHP 的类型声明(包括标量类型、数组、返回类型等)可以提高代码的可靠性和性能。
function add(int $a, int $b): int {
return $a + $b;
}
缓存重复的计算结果,避免在循环中进行复杂的操作。
// 使用缓存避免重复计算
$cache = [];
function fibonacci($n) use (&$cache) {
if ($n <= 1) return $n;
if (isset($cache[$n])) return $cache[$n];
$cache[$n] = fibonacci($n - 1) + fibonacci($n - 2);
return $cache[$n];
}
OpCode 缓存可以显著提高 PHP 的执行速度。常用的 OpCode 缓存有 OPcache 和 APCu。
安装和配置 OPcache:
sudo apt install php8.0-opcache
在 php.ini 中启用 OPcache:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
使用 Gzip 或 Brotli 压缩可以减少传输数据的大小,提高页面加载速度。
在 Nginx 中启用 Gzip 压缩:
server {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
对于数据库连接,使用持久连接可以减少连接建立的开销。
在 PDO 中启用持久连接:
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8mb4';
$options = [
PDO::ATTR_PERSISTENT => true,
];
$pdo = new PDO($dsn, $user, $password, $options);
根据应用需求调整 PHP 的内存限制,避免因内存不足导致的性能问题。
修改 php.ini 中的内存限制:
memory_limit = 256M
对于使用 MySQL 的应用,优化数据库配置可以显著提升性能。
示例 my.cnf 配置:
[mysqld]
innodb_buffer_pool_size = 70% of total RAM
innodb_log_file_size = 256M
query_cache_size = 64M
max_connections = 200
如果使用 PHP-FPM,合理配置进程数和启动参数可以提高性能。
示例 www.conf 配置:
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
利用工具分析代码的性能瓶颈,有针对性地进行优化。
Xdebug 是一个强大的 PHP 扩展,用于调试和分析代码性能。
安装 Xdebug:
sudo apt install php8.0-xdebug
配置 php.ini:
xdebug.mode=profile
xdebug.output_dir="/tmp"
然后使用 IDE(如 PhpStorm)或工具(如 Webgrind)分析性能数据。
Blackfire 是一个商业性能分析工具,提供详细的性能报告和优化建议。
安装 Blackfire:
composer require --dev blackfire/client
按照 Blackfire 的官方文档进行配置和使用。
HTTP/2 提供多路复用、头部压缩等特性,可以显著提升网页加载速度。
在 Nginx 中启用 HTTP/2:
server {
listen 443 ssl http2;
# 其他配置...
}
将静态资源(如图片、CSS、JS 文件)托管到内容分发网络(CDN),可以加快资源的加载速度,减轻服务器压力。
合理设置缓存头,使浏览器能够缓存静态资源,减少重复请求。
示例 Nginx 缓存配置:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
尽量减少对外部 API 或服务的请求次数,必要时可以考虑缓存外部数据。
通过以上多个方面的优化,可以显著提升 PHP 应用在 Ubuntu 系统下的性能和稳定性。建议根据具体应用场景和需求,逐步实施这些优化措施,并定期监控和评估优化效果。