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 数据库连接。

相关推荐
小鼻崽纸2 小时前
cacti漏洞CVE-2022-46169的复现
php
Python涛哥9 小时前
PHP框架之Laravel框架教程:1. laravel搭建
开发语言·php·laravel
大白玉米18 小时前
TVBOXOS6.0双端APP二开源码完整版全开源源码重构版
java·重构·php
布说在见1 天前
踩坑与成长:WordPress、MyBatis-Plus 及前端依赖问题解决记录
服务器·学习·php
八月的雨季 最後的冰吻1 天前
php算法-- 关联数组使用,优化sip账号去重
开发语言·php
rockmelodies2 天前
【PHP安全】免费解密支持:zend52、zend53、zend54好工具
开发语言·安全·php
速易达网络2 天前
PHP 与 Vue.js 结合的前后端分离架构
vue.js·php
Clownseven2 天前
使用 eBPF 实时捕获 TCP 重传告警:精准定位网络抖动问题
网络·tcp/ip·php