1.优化 Composer 自动加载
Laravel 项目依赖众多库,因此优化 Composer 的自动加载至关重要。通过调整 composer.json 文件,可以减少加载冗余。
生成 Composer 自动加载优化:composer dump-autoload --optimize
类映射(Classmap)优化:使用 --optimize-autoloader 参数来优化自动加载。
剔除开发依赖:生产环境中进行部署时,使用 --no-dev 选项剔除开发依赖:
composer install --optimize-autoloader --no-dev
2. 使用缓存加速响应
Laravel 提供强大的缓存机制来减少数据库查询和复杂运算。
(1)配置缓存:开发时候建议勿用,一般在生产环境中使用
php artisan config:cache 配置缓存
使用上述命令缓存配置文件(.env 除外),把 config 文件夹里所有配置信息合并到一个文件里,减少运行时文件的载入数量:
php artisan config:clear 清除配置缓存
上面命令会把生成文件 bootstrap/cache/config.php,缓存配置文件删除
(2)路由缓存(开发时候建议勿用,一般在生产环境中使用):路由缓存可以有效的提高路由器的注册效率,在大型应用程序中效果越加明显
php artisan route:cache 路由缓存
以上命令会生成 bootstrap/cache/routes.php 文件,需要注意的是,路由缓存不支持路由匿名函数编写逻辑。
注意:路由缓存不会随着更新而自动重载,so开发时候建议勿用,一般在生产环境中使用,可以配合 Envoy 任务运行器 一起使用。
php artisan route:clear 清除路由缓存
此命令做的事情就是把 bootstrap/cache/routes.php 文件删除。
(3)数据缓存
使用 Redis 或 Memcached 缓存频繁访问的数据:
Cache::remember('users', 3600, function () {
return User::all();
});
3. 数据库优化
(1)查询优化
避免 N+1 问题:使用 with() 预加载关联数据。
// 正确:预加载
foreach (User::with('posts')->get() as $user) {
echo $user->posts->count();
}
// 错误:N+1 查询
foreach (User::all() as $user) {
echo $user->posts->count();
}
(2)使用 select() 指定字段:减少不必要的数据加载。
User::select('name', 'email')->get();
(3)分块处理大数据集:避免内存溢出。
User::chunk(200, function ($users) {
foreach ($users as $user) { /* ... */ }
});
4.索引与迁移
为常用查询字段(如 WHERE、JOIN 条件)添加索引。
使用迁移时避免 down() 方法删除索引(生产环境可能需手动处理)。
5. 异步任务与队列
将耗时任务(如发送邮件、短信等)放入队列:
dispatch(new UserNotice($mobile,$name));
Mail::to('user@example.com')->queue(new WelcomeEmail());
配置队列驱动为 Redis 或数据库,并监控队列工作进程:
php artisan queue:work --tries=3
6. 会话与 Cookie
高流量场景避免使用 database 会话驱动,改用 redis 或 memcached。
减少 Cookie 大小(避免在 Cookie 中存储会话数据)。
7. 监控与分析
使用 Telescope:调试和监控请求、查询、日志等。
bash
composer require laravel/telescope --dev
php artisan telescope:install
日志优化:使用 daily 或 syslog 驱动,避免日志文件过大。
8. 部署优化
OPcache:启用 PHP OPcache 加速脚本执行。
预编译类:生产环境运行 php artisan optimize(Laravel 5.6+ 已默认优化)。
水平扩展:通过负载均衡部署多实例,共享缓存和会话存储。
9. 其他技巧
禁用调试模式:确保 .env 中 APP_DEBUG=false。
使用 CDN:加速静态资源加载。
数据库读写分离:配置 read 和 write 数据库连接。