laravel框架优化

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

高流量场景避免使用 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+ 已默认优化)。

水平扩展:通过负载均衡部署多实例,共享缓存和会话存储。

  1. 其他技巧

禁用调试模式:确保 .env 中 APP_DEBUG=false。

使用 CDN:加速静态资源加载。

数据库读写分离:配置 read 和 write 数据库连接。

相关推荐
右耳朵猫AI4 小时前
PHP周刊2026W38 | Laravel AI可观测、Symfony三版本、Webhook零信任、事件溯源架构
后端·php·laravel
专业程序开发源4 小时前
springboot篮球联赛管理系统13635-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
子非鱼a5 小时前
【WEB】cat flag
php
4SAPI6 小时前
大模型 API 聚合平台选型指南:企业与个人用户的接入架构、稳定性与成本评估
人工智能·php·agent
PHP实战开发录6 小时前
PHP Session为什么会拖慢并发请求
系统架构·php·开发
闲云野鹤在人间1 天前
docker 入门 | 第5章 网络详解
网络·docker·架构·华为云·php
PHP实战开发录1 天前
MySQL连接数为什么会打满
系统架构·php·开发
VXbishe1 天前
【课程设计】基于SpringBoot的乡村政务服务系统的设计与实现-计算机毕设77011
javascript·vue.js·spring boot·python·php·课程设计·政务
aixingpan1 天前
aixingpan.cn API开发文档:api_docs_bichart_natalvssolar_return2接口指南
前端·php
曦夜日长1 天前
Linux系统篇,进程概念(四):内核链表的深度理解、进程优先级的底层理解
linux·运维·服务器·php