Laravel 应用性能优化项

路由缓存

// 缓存
php artisan route:cache
// 清除
php artisan route:clear

配置缓存

// 清除
php artisan config:clear
// 缓存
php artisan config:cache

优化 Composer 自动加载

通常,Composer 生成自动加载文件非常快。但是,在生产环境中,如果设置了 PSR-4 和 PSR-0 自动加载规则,这可能会变慢
可以通过将下面命令添加到部署脚本来优化自动加载器文件创建过程

composer dump-autoload  -o

类映射加载优化

optimize 命令把常用加载的类合并到一个文件里,通过减少文件的加载,来提高运行效率:

php artisan optimize --force

会生成 bootstrap/cache/compiled.php 和 bootstrap/cache/services.json 两个文件,可以通过修改 config/compile.php 文件来添加要合并的类,在 production 环境中,参数 –force 不需要指定,文件就会自动生成

要清除类映射加载优化,请运行以下命令:

php artisan clear-compiled

此命令会删除上面 optimize 生成的两个文件
注意:此命令要运行在 php artisan config:cache 后,因为 optimize 命令是根据配置信息(如:config/app.php 文件的 providers 数组)来生成文件的

谣言:「不要大量使用 Blade 视图」

铭记这个:Laravel 编译 Blade 视图。编译就是说,在流程结束时,你将拥有一个已编译的完整文件,而非使用多个文件。所以,丝毫不需要担心

换个其他 / 更好的 Cache/Session 驱动

默认当你新建一个 Laravel 项目的时候 Cache 和 Sessions 的驱动默认为 「文件」,考虑下换个更好的驱动例如 「Redis」

升级 Laravel 版本

当新版本发布时,请记得尽快升级 Laravel。这不仅关乎新功能:在可能的情况下,所有贡献者都花时间修复代码库周边的性能问题

删除未使用的服务

请花一些时间检查 config/app.php 文件,看看你是否能找到一个你不需要的服务。如果一切正常,请尝试将其删除并测试您的应用程序

使用预加载进行查询

预加载是一种通过使用特定语法来减少发送到数据库的查询数量来提高 Eloquent 性能的方法。此问题称为 N + 1 查询问题, 假设两个模型:Book 和 Author。 每本 book 都有它的 author

$books  =  App\Book::all();
foreach  ($books  as  $book)  {
    echo  $book->author->name;
}

想象一下,您的数据库中有 1000 本书。 现在,此代码将执行 1001 次查询以检索这 1000 本书的作者姓名。但是,如果你编写这样的代码

$books  =  App\Book::with('author')->get();
foreach  ($books  as  $book)  {
    echo  $book->author->name;
}

将只执行两个查询而不是 1001! 这是巨大的性能提升

缓存查询结果

$value  =  Cache::remember('top_10_albums',  60,  function  ()  {
    return  Album::with('artist',  'producer')->getTopTen();
});

为你的数据表建立索引

必要的时候请为您的数据表建立索引

中间件

合理使用中间件

使用队列

可以考虑异步执行任务

使用 Pusher 改进异步队列

想象一下,你正在创建一个繁重的(在计算方面)进程,并且希望给用户显示这个任务的进度条。你可以轻松地使用队列的异步任务并集成 Pusher 来向前端发送消息以达到目的,即使这个任务没有完成

使用 Logs / Debugbars / Laravel Telescope 测量调试工具

  • 慢日志: MYSQL , MariaDB 和其他数据库可以启用慢日志来追踪那些语句花了大量的时间。你可以使用这些数据来判定是否必须更改或优化特定的代码(或查询);
  • Debugbar : Laravel Debugbar 是一个很棒的扩展包。在很多应用程序方面,你可以使用它来收集数据。比如查询,视图,时间等等;
  • Laravel Telescope : 另一个非常酷的工具是 Laravel Telescope ,对 Laravel 应用,有 “优雅的调试助手” 的美称

更新 PHP 版本

更新 PHP 版本

在服务器上使用 Lumen

在服务器上使用 Lumen

为静态资源提供 CDN 服务

  • Akamai(阿卡迈
  • Max CDN
  • Cloudflare
  • 亚马逊 AWS 服务 (S3 + CloudFront)
  • 国内可以使用又拍云和七牛云

使用高级测量工具

安装 Laravel Debugbar 或 Telescope 将是一个良好的开端,但对于更重大的项目,这还不够。
你需要选择更高级的工具,如下:

  • New Relic;
  • AppOptics;
  • Datadog;
  • Sentry;

以上列表的应用程序不做同样的事情:他们被设计用于不同目的。花些时间去学习他们以理解他们如何提供帮助。

垂直扩展

你已经对代码的细枝末节都进行了彻底优化,但是你的应用体量在不断增长。迟早你都要进行垂直扩展。
有个简单的说法就是:更多的 RAM,更多的空间,更多的带宽就,以及更多的 CPU
注意这个只是对许多没有足够时间来安排重构 / 优化的初创公司的通常做法。法子是不错,所以你可以认为这是能让你喘口气的临时解决方案

水平扩展

水平扩展是另一种扩展的方式,它不同于传统的垂直扩展,主要有两点:

  • 取代在现有配置上增加硬件资源的方式,你可能将会添加更多的功能模块来处理日益增加的流量。 在垂直扩展的环境中,你只需要增加服务器配置就行,但是水平扩展应用就意味着你的应用将会部署运行在不同的机器上,有可能是在一个负载均衡机器或者其他服务之后。这就意味着需要更多的设置和配置;此时事情就没那么简单了
  • 并非所有的应用都可以在短时间内扩展完毕,有时候你需要重构隔离一些代码;有时候你需要把应用拆分为不同规模的小型服务
    水平扩展会有有很多事情要做,但是一旦你能对应用进行水平扩展时,好处也是超乎想象的
    ————————————————
    原文作者:Summer
    转自链接:翻译:上线清单 —— 20 个 Laravel 应用性能优化项
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4
sanders

“合理使用中间件” 感觉原作者本来想在这里写点什么,但最终还是摆烂了。 :joy:

9个月前 评论
LinFengZi (楼主) 9个月前

好多都是别人发过的,没有一点创新

9个月前 评论
LinFengZi (楼主) 9个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!