gzip压缩(减少传输数据量)、fastcgi_cache(缓存PHP响应),并优化worker_processes(设为CPU核心数)。pm=dynamic):pm.max_children=100(每个ThinkPHP进程约占用30-50MB内存,避免内存溢出)、pm.start_servers=20(启动时进程数,建议为CPU核数×4)、pm.min_spare_servers=10/pm.max_spare_servers=30(空闲进程范围,保证快速响应突发请求);pm=static):pm.max_children=30(固定进程数,适合流量稳定的高并发场景,减少进程创建开销);request_terminate_timeout=30s(防止单个请求长时间占用进程)、slowlog=/var/log/php-fpm/slow.log(记录慢查询,定位性能瓶颈)。echo "fs.file-max = 65535" >> /etc/sysctl.conf
echo "ulimit -n 65535" >> /etc/security/limits.conf
sysctl -p
vm.swappiness(设为10-30,减少内存交换)。php think optimize:route,生成runtime/route.php文件,避免每次请求都解析路由规则,降低路由注册开销。php think optimize:autoload,生成runtime/classmap.php文件,提升自动加载效率(避免遍历目录查找类文件)。php think optimize:schema,生成runtime/schema目录下的表字段缓存文件,减少数据库字段查询次数(避免每次查询都执行DESCRIBE语句)。php think optimize:config,生成runtime/init.php文件,替代config目录下的配置文件加载,减少I/O操作。cache配置项),用于存储热点数据(如商品信息、用户会话),减少数据库访问压力。例如:// config/cache.php
return [
'default' => 'redis',
'stores' => [
'redis' => [
'type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'select' => 0,
'timeout' => 0,
'persistent' => false,
'prefix' => 'tp6:',
],
],
];
php.ini中启用OPcache(opcache.enable=1),缓存PHP脚本编译后的字节码,减少脚本解析时间(提升20%-30%的执行效率)。建议配合ThinkPHP预加载脚本(preload.php),提前加载框架核心和常用类。WHERE、JOIN、ORDER BY字段添加索引(如主键、唯一索引、联合索引),避免全表扫描。例如,用户表的username字段添加索引:ALTER TABLE `user` ADD INDEX `idx_username` (`username`);
SELECT *(只查询需要的字段)、减少JOIN操作(如必须使用,确保关联字段有索引),禁用ORDER BY RAND()(随机排序性能差)。Swoole或Workerman实现数据库连接池,减少每次请求建立连接的开销(连接创建时间约占数据库操作总时间的30%以上)。whereIn批量查询。例如:// 错误:循环内查询(N次查询)
foreach ($userIds as $userId) {
$user = User::find($userId);
}
// 正确:批量查询(1次查询)
$users = User::whereIn('id', $userIds)->select();
app()->make()获取单例对象(如数据库连接、Redis客户端),减少对象实例化次数。chunk方法处理大量数据(如导出10万条用户数据),避免内存溢出:User::chunk(100, function ($users) {
foreach ($users as $user) {
// 处理每批数据(每次处理100条)
}
});
cursor方法(生成器特性)逐行读取数据,进一步减少内存占用:$cursor = User::cursor();
foreach ($cursor as $user) {
// 处理数据(内存开销恒定)
}
request_cache(config/app.php中设置'request_cache' => true),自动缓存请求结果(默认缓存时间为1分钟),减少重复计算。all.css、all.js),减少HTTP请求次数(HTTP请求是性能瓶颈之一)。gzip压缩(gzip on; gzip_types text/css application/javascript;),将静态资源压缩至原大小的30%-70%,减少传输数据量。app_debug=false时记录错误日志),通过日志定位异常(如SQL错误、未捕获异常)。slowlog=/var/log/php-fpm/slow.log)和MySQL慢日志(slow_query_log=1),分析执行时间超过阈值的请求和SQL语句。top(查看CPU/内存占用)、htop(交互式监控)、vmstat(查看系统整体性能)、iostat(查看磁盘I/O)监控服务器资源使用情况。