Laravel项目打开慢主要因N+1查询、未缓存配置与路由、OPcache未启用、缓存驱动为file及视图/访问器隐式查询所致;需启用预加载、config:cache/route:cache、OPcache、Redis缓存并优化访问器逻辑。

Laravel项目打开特别慢,通常不是单一原因造成的,而是多个环节叠加导致的响应延迟。最常见、影响最大的问题集中在数据库查询、框架启动开销和缓存缺失这三块。
N+1 查询是头号性能杀手
代码看着干净,但一上线就卡:比如遍历用户列表时,每个用户都调用 $user->posts->count() 或 $user->profile->avatar,没做预加载。50个用户就会触发 1 次主查询 + 50 次关联查询,轻松突破上百次SQL执行。数据库连接池被占满,页面等3秒以上很常见。
配置和路由没缓存,每次请求都重新解析
开发时 APP_DEBUG=true 是方便,但上线后还开着,框架就得反复读取几十个配置文件、解析全部路由规则、扫描服务提供者——这些纯文件I/O和PHP编译开销,在高并发下会明显拖慢首字节响应时间(TTFB)。
OPcache 未启用或配置不合理
Laravel包含数百个PHP文件,没有OPcache时,每次请求都要重新编译所有框架类和业务代码。哪怕服务器内存充足,缺了 opcache.enable=1 和足够大的 opcache.memory_consumption(建议128MB起),CPU就会大量浪费在重复编译上。
Redis 或其他缓存驱动未生效.env 里还是默认的 CACHE_DRIVER=file,而文件缓存读写慢、不支持并发、无法跨进程共享。高频数据(如菜单、用户权限、统计结果)反复查库,本该毫秒返回的接口变成秒级响应。
视图渲染或模型访问器暗藏重复查询
Blade模板里多次访问同一个 $post->author->name,或者模型里定义了 getScoreAttribute() 却没预加载关联表,导致单条记录被反复查库;更隐蔽的是,一个访问器内部调用了 Score::whereIn(...)->get(),循环渲染时直接引爆N+1。
- 关闭调试模式:
APP_DEBUG=false - 运行缓存命令:
php artisan config:cache && php artisan route:cache - 确保OPcache已启用并调优内存参数
- 把
CACHE_DRIVER和SESSION_DRIVER改为redis - 用
with()预加载所有模板中会用到的关联关系,避免懒加载 - 检查模型访问器逻辑,把数据库操作移到预加载或缓存层处理
不复杂但容易忽略


















