部署后变慢主因是本地与生产环境配置差异:必须关闭调试模式(app_debug=false、app_env=production),启用config:cache、route:cache、view:cache三大缓存,正确配置并重启opcache(含opcache.enable_cli=1和禁用时间戳校验),并将session/cache/数据库驱动升级为redis等高性能方案以避免文件锁与n+1问题。

部署后变慢,不是框架本身的问题,而是本地和生产环境在配置、资源、运行机制上存在关键差异。本地开发追求便利和调试友好,生产环境则需要极致的效率与稳定性——如果没做针对性调整,性能落差就会非常明显。
调试模式未关闭
本地通常开启 APP_DEBUG=true,这会让 Laravel 记录大量日志、显示详细错误堆栈、禁用缓存、反复加载配置和路由。这些对开发很友好,但会严重拖慢响应速度。部署时必须确保 .env 中设置:
APP_DEBUG=falseAPP_ENV=production
缓存机制完全未启用
本地可能跳过缓存命令,而生产环境必须主动开启几类核心缓存:
-
php artisan config:cache—— 把所有配置合并为单个PHP文件,避免每次请求都解析 .env 和多个 config/*.php -
php artisan route:cache—— 将路由注册逻辑固化为静态数组,跳过动态注册过程 -
php artisan view:cache(Laravel 10+)—— 预编译 Blade 模板,减少运行时解析开销
注意:这些命令只在 APP_ENV=production 下生效;修改配置或路由后需重新执行。
OPcache 实际未生效
PHP 的 OPcache 是提升性能最直接的手段,但常因配置不完整而“形同虚设”:
-
opcache.enable=1只作用于 Web 请求(FPM),CLI 模式(如 Artisan 命令)默认不启用,需额外设置opcache.enable_cli=1 - 生产环境应关闭时间戳校验:
opcache.validate_timestamps=0和opcache.revalidate_freq=0,否则每秒检查文件变更,反而增加 I/O 开销 - 配置修改后必须重启 PHP-FPM 进程(
systemctl reload php*-fpm或kill -USR2),仅改 php.ini 不生效
数据库与中间件成为隐形瓶颈
本地用 SQLite 或轻量 MySQL,生产用真实数据库 + 复杂网络链路,稍不注意就暴露问题:
- N+1 查询在本地数据少时不明显,上线后数据量增大,一次列表页可能触发上百次数据库查询
- 全局中间件(如日志、权限、跨域)若逻辑复杂或调用远程服务,会逐层叠加延迟
- Session 和 Cache 默认使用 file 驱动,高并发下文件锁竞争严重;应切换为 Redis 或 Memcached











