CentOS下提升ThinkPHP性能的综合方案
数据库是Web应用的常见性能瓶颈,ThinkPHP可通过以下方式优化查询效率:
'log' => ['type' => 'file', 'path' => LOG_PATH, 'level' => ['sql']]
,记录所有SQL语句,便于分析慢查询。slow_query_log
和long_query_time
参数(如设置为1秒)定位执行慢的SQL,针对性优化。SELECT *
(只查询必要字段)、为常用查询条件添加索引(如WHERE、JOIN字段)、用JOIN
代替子查询、添加LIMIT
限制返回数量。Cache
类(支持文件、Redis、Memcached等),设置合理的过期时间(如Cache::set('key', 'value', 3600)
)。chunk
分批处理大数据(如Model::chunk(100, function($items) {...})
),或用批量插入(insertAll
)减少交互次数。缓存是提升ThinkPHP性能的关键手段,可显著减少重复计算和数据库访问:
'cache' => [
'type' => 'Redis',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '', // 如有密码需填写
],
'HTML_CACHE_ON' => true
开启静态缓存,设置缓存时间(如'HTML_CACHE_TIME' => 3600
)和后缀(如'HTML_FILE_SUFFIX' => '.html'
),将动态页面生成静态HTML,减少服务器负载。Cache::rm('key')
清除对应缓存,确保数据一致性。PHP运行环境的配置直接影响ThinkPHP的性能,需重点优化以下参数:
/etc/php.ini
,添加或修改:[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 缓存内存大小(MB)
opcache.interned_strings_buffer=8 # 内部字符串缓冲区大小
opcache.max_accelerated_files=4000 # 加速文件数量
opcache.revalidate_freq=60 # 检查文件更新的时间间隔(秒)
/etc/php-fpm.d/www.conf
,根据服务器内存调整进程数(如2GB内存可设置pm.max_children=50
),避免进程过多导致内存耗尽:pm = dynamic # 动态进程管理模式
pm.max_children = 50 # 最大子进程数
pm.start_servers = 5 # 启动时的进程数
pm.min_spare_servers = 5 # 最小空闲进程数
pm.max_spare_servers = 35 # 最大空闲进程数
pm.max_requests = 500 # 每个子进程处理的最大请求数(避免内存泄漏)
/etc/php.ini
,将memory_limit
设置为适合应用的大小(如256MB,根据应用需求调整),避免脚本因内存不足而终止。Web服务器(Nginx/Apache)的配置对ThinkPHP的性能也有重要影响:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
Cache-Control
和ETag
头,让浏览器缓存静态资源(如图片、CSS),减少重复请求。Nginx配置示例:location ~* \.(jpg|jpeg|png|gif|css|js)$ {
expires 30d; # 缓存30天
add_header Cache-Control "public";
}
/static
),通过Nginx直接处理,避免传递给PHP-FPM。良好的代码习惯可直接提升ThinkPHP的性能:
'app_debug' => false
,关闭调试模式可停止日志记录和缓存失效,提升性能。Route::group('admin', function() {
Route::get('index', 'admin/Index/index');
Route::get('user', 'admin/User/index');
});
trait
或helper
函数),减少不必要的计算。定期监控应用性能,及时发现并解决瓶颈:
top
、htop
、vmstat
监控系统资源(CPU、内存、磁盘IO),通过php-fpm status
查看PHP-FPM进程状态。