Linux环境下 Laravel 性能优化实战清单
一 基础环境优化
- 保持框架与依赖为最新稳定版,及时获得性能修复与安全改进。
- 启用并正确配置 OPcache(生产环境务必开启):示例参数可参考
opcache.enable=1、opcache.memory_consumption=128、opcache.interned_strings_buffer=8、opcache.max_accelerated_files=4000;同时根据负载适当提升 memory_limit(如 512M)。
- 使用 Redis/Memcached 作为缓存与队列后端,安装对应 PHP 扩展(如 php-redis)并重启 PHP-FPM 生效。
- Web 服务器建议优先 Nginx(或高性能调优的 Apache),启用 HTTP/2 与 Gzip/Brotli 压缩,静态资源交由 Nginx 直接服务。
二 应用层缓存与路由编译
- 在 生产环境执行以下 Artisan 命令,减少运行期开销:
- 路由缓存:
php artisan route:cache
- 配置缓存:
php artisan config:cache
- 视图编译:
php artisan view:compile
- 选择合适的缓存驱动(如 Redis/Memcached),在
.env 设置 CACHE_DRIVER=redis 并在 config/cache.php 配置连接;合理使用 缓存标签 与 过期策略,对热点数据做 缓存预热,变更时按策略失效。
三 数据库与 Eloquent 优化
- 为高频查询字段建立合适索引,避免全表扫描;大数据量列表使用分页降低单次传输量。
- 解决 N+1 查询:使用
with() 进行预加载,用 select() 明确字段,避免 select *。
- 利用 查询缓存:
Cache::remember('key', $minutes, fn() => Model::where(...)->get());
- 对批量写入/更新使用批量操作,减少数据库连接与事务开销。
四 队列与异步任务
- 将耗时任务(邮件、导出、图片处理等)放入队列异步执行,常用驱动为 Redis/数据库;使用 Supervisor 守护队列进程,确保异常自动重启。
- 启动 Worker 示例:
php artisan queue:work redis --queue=emails --tries=3 --timeout=60;可按业务拆分多个队列并行处理(如 emails、notifications),提升吞吐。
- 使用 Laravel Horizon(Redis 队列)进行监控与可视化,便于发现瓶颈与失败重试治理。
- 大批量数据处理采用 批处理(Batching):将大任务拆分为细粒度、幂等的 Job,回调中只做轻量状态记录与通知,避免频繁轮询批次状态。
五 Web 服务器与交付优化
- Nginx 配置要点:将根目录指向
public,开启 try_files $uri $uri/ /index.php?$query_string; 统一入口;PHP 通过 Unix Socket 与 PHP-FPM 通信;启用 HTTP/2 与 Gzip 压缩。
- 静态资源使用 CDN 加速,并配置合适的 Cache-Control/ETag 等 HTTP 缓存 头;按需启用 代码分割 减少首屏体积。
六 监控、日志与持续优化
- 接入 Laravel Debugbar/Blackfire 做性能剖析,定位慢路由、慢查询与热点调用。
- 生产环境接入 New Relic/Datadog 等 APM,结合 Prometheus/Grafana 做系统与应用指标监控。
- 合理配置 日志级别 与保留策略,避免日志过大影响磁盘与 I/O;定期更新 Laravel 与依赖并回归性能基线。