我的Laravel应用加载速度极慢,如何优化实现毫秒级加载?
Laravel 应用秒级加载优化方案
基础配置优化
- 启用PHP OPcache扩展:Laravel框架依赖的文件数量较多,OPcache可避免每次请求重复编译PHP脚本,是成本最低的优化手段,推荐基础配置如下:
opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000 opcache.revalidate_freq=2 opcache.save_comments=1 - 切到生产环境模式:确认
.env文件中APP_ENV=production、APP_DEBUG=false,调试模式会额外加载日志收集、异常栈追踪等逻辑,会显著拖慢响应速度 - 执行框架内置缓存命令:
- 配置缓存:
php artisan config:cache,将所有配置文件合并为单个缓存文件,减少运行时的文件IO开销 - 路由缓存:
php artisan route:cache,项目无闭包路由时可使用,大幅降低路由匹配耗时 - 视图缓存:
php artisan view:cache,提前编译所有Blade模板,避免请求时实时编译 - 类加载优化:
php artisan optimize --force,生成优化的类映射表,减少自动加载的文件查找耗时
- 配置缓存:
数据库层面优化
- 排查慢SQL:开启数据库慢查询日志,定位执行时长超过500ms的SQL语句,针对性优化
- 解决N+1查询问题:所有关联查询统一使用
with()做预加载,禁止在循环中触发关联查询 - 完善索引:所有where条件、order by字段、关联查询外键必须加索引,单表数据量超过10万优先考虑联合索引
- 数据缓存:高频读取、低更新频率的数据(如公共配置、字典表)存入Redis缓存,避免每次请求重复查库
- 分页查询:所有列表类接口必须做分页,禁止一次性读取全表数据
业务代码优化
- 裁剪无用依赖:检查
composer.json,移除项目未使用的第三方扩展包,减少框架启动时加载的类数量 - 优化中间件:移除不需要的全局中间件,非通用逻辑改为路由中间件按需加载
- 延迟加载服务:非核心服务提供者在
config/app.php中设为延迟加载(类内声明protected $defer = true),避免请求启动时实例化所有服务 - 耗时逻辑异步化:短信、邮件发送、批量数据处理等耗时逻辑全部放入队列异步执行,不要阻塞主请求
服务器与静态资源优化
- 切换高性能驱动:缓存、session统一使用Redis驱动,替换默认的文件驱动,降低IO开销
- 静态资源优化:CSS、JS、图片等静态资源做合并压缩,开启gzip/brotli传输压缩,减少传输体积与请求数量
- 静态资源走CDN:静态资源托管到CDN节点,降低源站压力的同时缩短用户访问延迟
内容的提问来源于stack exchange,提问作者Kick B
相关产品推荐
相关产品推荐

