当前位置: 首页 > 后端技术 > PHP

Go-livechecklist-Laravel应用性能优化的20个项目

时间:2023-03-29 15:24:07 PHP

假设你的laravel应用已经投入生产环境。从第一个用户,到第十个,一百个,直到上千个用户!慢慢地,随着用户数量的增加,你的网站会变得越来越慢。那我们该怎么办呢?细节决定成败经过一番搜索,我决定写下这20个技巧来加速您的网站。我将从基础开始,其中大部分可以立即完成。然后,我会逐渐增加难度。最后,还有更高级的内容。如果你按照我的步骤一步一步来,相信你的网站会得到质的提升。享受你的学习之旅!如果您有任何建议,可以在下方留言!很高兴和你讨论。基本优化让我们看看我们能在几秒钟内做些什么。1、服务器每执行一次请求,路由缓存就会注册所有的路由,这会耗费一些时间。但是,您可以选择缓存路由列表以跳过此步骤。缓存路由列表非常简单。您需要做的是在部署应用后执行以下命令:phpartisanroute:cache但是,如果您添加或修改了任何路由信息,请不要忘记清除之前的缓存并重新执行缓存命令。phpartisanroute:clear#然后,再次执行phpartisanroute:cache注意这里只对控制器类路由有效。2.缓存配置和路由一样,你也可以在应用中缓存配置文件。想象这样一个场景:每次向应用程序发送请求时,Laravel都需要加载不同的配置文件并打开.env文件读取内容。这种方式性能很低,不是吗?不过别担心,有一个Artisan命令可以解决这个问题。phpartisanconfig:cache你可以在部署后使用它。与路由类似,编辑内容时不要忘记清除缓存。phpartisanconfig:clear#然后,再来一次...phpartisanconfig:cache3.优化Composer自动加载Composer生成自动加载文件的速度通常非常快。但是,在生产环境中,如果设置了PSR-4和PSR-0自动加载规则,这可能会更慢。您可以通过将以下命令添加到您的部署脚本来优化自动加载器文件创建过程。$composerdump-autoload-o不要忘记它。4.谣言:“不要经常使用BladeViews”我满脑子都是这个谣言。“永远不要大量使用Blade视图,因为它会降低应用程序性能!”天大的谎言!一脸严肃!请记住这一点:Laravel编译Blade视图。编译意味着在该过程结束时,您将编译一个完整的文件,而不是使用多个文件。所以,没有必要担心。*中级干货5.换一个/更好的Cache/Session驱动默认情况下,当你创建一个新的Laravel项目时,Cache和Session驱动默认为“file”。在本地开发环境和小型项目中还好,但是当项目变大时情况会变得更糟。因此,考虑换用更好的驱动程序,例如Redis。Laravel内置了对此的支持,你所要做的就是安装Predis。更多细节在这里和这里。6.尽快升级Laravel版本当有新版本发布时,请记得尽快升级Laravel。这不仅仅是关于新功能:在可能的情况下,所有贡献者都会花时间解决代码库周围的性能问题。所以,请继续关注并保持代码更新。7、删除不用的服务这是一个很多人经常忘记的小技巧。问问自己:“我需要它吗?*我们知道Laravel自带很多服务。毕竟这是一个全栈框架。每个服务都有它的位置。所以,花点时间检查一下config/app.php文件,看看你是否能找到你不需要的服务。如果一切正常,尝试删除它并测试你的应用程序。它应该有帮助(一点点)!8.使用预先加载查询如果你知道Laravel是什么,你可能知道EagerLoading是什么。如果你不是最新的,EagerLoading是一种通过发送到数据库的查询次数来减少Eloquent性能的方法。这个问题称为N+1查询问题。让我们举个例子,你有两个模型:Book和Author,每本书都有它的作者。$books=App\Book::all();foreach($booksas$book){echo$book->author->name;}假设你的数据库中有1000本书。现在,此代码将执行1001次查询以检索这1000本书的作者姓名。1(查询获取1000本书的数据)+1000(查询获取每本书的作者数据)=1001。但是如果你写这样的代码$books=App\Book::with('author')->get();foreach($booksas$book){echo$book->author->name;}更改基本查询以避免此性能问题。您将只执行两个查询而不是1001!这是一个巨大的性能提升。9.缓存查询结果有时,缓存特定查询的结果可能是个好主意。想象一下这个场景:您将要在您的应用程序主页上显示“十大专辑”图表。这项工作是通过从数据库执行查询来完成的(查询可能涉及艺术家表和其他一些表)。您的主页每小时有1000次访问。如果查询此排行榜数据的次数为每小时1,000次,则一天内执行的查询次数为24,000次。现在,我们假设此排行榜每小时更新一次。那么,将每个查询的结果缓存一个小时怎么样?$value=Cache::remember('top_10_albums',60,function(){returnAlbum::with('artist','producer')->getTopTen();});未找到此缓存组件的remember方法在缓存的情况下,会先从数据库中取出数据,缓存60分钟。过期后,会再次从数据库中取出最新的数据更新缓存。每天查询从24000到24。10.为你的数据表创建索引记住,请在必要时为你的数据表创建索引。这似乎是一个无用的提示,但实际上是必要的。因为我看过很多应用,他们的数据表是没有索引的。实现起来很简单,可以新建一个数据库迁移,使用里面的方法添加index.Schema::table('my_table_name',function(Blueprint$table){$table->index('field_to_be_indexed');});当然,您不必在任何地方直接创建索引。您必须研究您的业务、您的代码和您的查询,以分析最需要索引的位置,然后构建它。11.中间件太多?Laravel将对您注册的中间件进行大量(之前/之后)调用。所以,请仔细检查它们并删除那些你不需要的中间件。通常中间件列表在Kernel.php中。12.是时候使用队列了!有时Laravel比预期慢,您可以考虑异步执行任务。最常见的情况是发送欢迎邮件,我们来看看任务流程。用户填写我们的表格;将他/她的详细信息写入数据库;向他/她发送一封带有欢迎说明和确认链接的电子邮件;并显示感谢页面;很多时候这些任务完全在控制器内并按顺序执行。我的建议是学习如何使用事件和队列,这样可以将发送邮件的任务交给专门的进程,从而提高用户体验。*进阶干货13.使用Pusher改进异步队列上面我写了一些队列相关的内容。有时,您还可以使用队列来改进面向用户的任务。想象一下,您正在创建一个繁重的(计算性的)流程,并希望向用户显示该任务的进度条。可以很方便的使用队列异步任务,集成Pusher,即使任务没有完成,也可以向前端发送消息。另一个经常使用的例子是在不刷新页面的情况下向用户发送消息。想想看!14.使用Logs/Debugbars/LaravelTelescope来衡量调试工具在提升自己方面,有一句话我很喜欢。我是从我的CEO那里听到的(感谢Massimo!)引用了PeterDrucker的话。如果你不能衡量它,你就不能改进它。这个概念非常适合Web应用程序的上下文。要改进Web应用程序的请求管理时间,需要衡量很多事情。幸运的是,我们有很多非常好的工具。慢速日志记录:MYSQL、MariaDB和其他数据库可以启用慢速日志记录以跟踪哪些语句花费了大量时间。您可以使用此数据来确定是否必须更改或优化特定代码(或查询);Debugbar:LaravelDebugbar是一个很棒的扩展包。在许多应用程序方面,您可以使用它来收集数据。如查询、查看、时间等;LaravelTelescope:另一个非常酷的工具是LaravelTelescope,它有Laravel应用程序“优雅调试助手”的美誉。如果你有兴趣,我在这里写了一篇关于它的文章;15.更新你的PHP版本虽然这看起来很简单,但如果你的项目足够大,执行起来会很痛苦,所以我认为这应该包含在高级技能中。如果您的PHP版本低于7.0,请更新您的PHP和laravel版本。16、在服务端使用Lumen如果你的应用数据量增长很多,你可以考虑为你的系统做服务拆分。但是,没有明确的操作指南来引导您完成它:拆分高或低的标准取决于许多因素,从应用程序的领域到拆分所有必需内容所需的工作。然而,一旦你分裂,你的项目将获得新的生命。如果你对这个话题感兴趣,可以从https://medium.com/@munza/lar...17.为静态资源提供CDN服务。我很确定你有很多前端资源,比如CSS文件和JS脚本。您可以通过多种方式减少发送给用户的数据量:压缩静态资源;捆绑静态资源(将多个CSS文件或JS脚本合并为一个,减少请求次数);启用gzip压缩;但是,如果你遇到接收大量流量的情况,你可以将你的静态资源托管在专用的CDN服务器上,比如:阿卡迈(Akamai);最大CDN;云耀斑;亚马逊AWS服务(S3+CloudFront);使用优拍云和七牛云18.使用高级测量工具安装LaravelDebugbar或Telescope是一个好的开始,但对于更严肃的项目,这还不够。您需要选择更高级的工具,例如:NewRelic;应用光学;数据狗;哨兵;上面列表中的应用程序不做同样的事情:它们是为不同的目的而设计的。花时间研究它们以了解它们如何提供帮助。19.纵向扩展你已经彻底优化了代码的细节,但你的应用量却在不断增长。迟早你必须垂直扩展。有一个简单的说法:更多RAM、更多空间、更多带宽和更多CPU请注意,这只是许多没有足够时间安排重构/优化的初创公司的普遍做法。这是个好主意,因此您可以将此视为让您休息一下的临时解决方案。20、横向扩展横向扩展是另一种扩展方式。它不同于传统的垂直扩展。主要有两点:不是在现有的配置上增加硬件资源,而是增加更多的功能模块来应对不断增加的流量。在垂直可扩展的环境中,您只需要增加服务器配置,但水平扩展应用程序意味着您的应用程序将部署并运行在不同的机器上,可能在负载均衡器机器或其他服务之后。这意味着需要更多的设置和配置;此时事情就不那么简单了;并不是所有的应用都能在短时间内得到扩展,有时需要重构和隔离一些代码;有时您需要将应用程序拆分为不同大小的较小服务。水平扩展需要做很多事情,但是一旦你可以水平扩展你的应用程序,好处是难以置信的。结论今天的内容足够了!我结合我的个人经验和我以前做过的一些研究创建了这个列表。如果您愿意,请随时提出新的建议,我很乐意相应地更新这篇文章。