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

相关推荐
catchadmin35 分钟前
PHP True Async RFC 被拒——原生异步离 PHP 还有多远?
开发语言·php
J***793936 分钟前
PHP在电商中的Magento
开发语言·php
q***06295 小时前
ThinkPHP和PHP的区别
开发语言·php
Protein_zmm7 小时前
第一章 计算机网络和因特网(下)
服务器·计算机网络·php
依了个旧9 小时前
🚀 告别手写注释!Laravel 自定义命令创建模型时自动生成 @property 属性提示
laravel
q***9949 小时前
IPV6公网暴露下的OPENWRT防火墙安全设置(只允许访问局域网中指定服务器指定端口其余拒绝)
服务器·安全·php
u***u68510 小时前
PHP在电商中的WooCommerce
开发语言·php
冠希陈、10 小时前
PHP 过滤敏感词(含类库)
开发语言·php·内容敏感词
v***870411 小时前
QoS质量配置
开发语言·智能路由器·php
JaguarJack12 小时前
不用 Web 服务器也能跑 PHP?这事比你想的有意思
php·服务端