您是否正在寻找成功的方法来加快Laravel的性能,同时在您的项目上工作?你来对地方了!
Laravel是一个流行的开源PHP框架,以其强大的安全性和简单而复杂的编码架构而闻名。它是构建能够推动收入和推动业务发展的尖端Web应用程序的绝佳选择。
尽管如此,如果你不使用正确的优化技术,Laravel的性能可能会变慢。
幸运的是,有许多技巧可以最大限度地提高Laravel的性能。我们汇总了您可以遵循的最有效的优化技巧列表。
- Laravel性能优化的重要性
- 如何测量Laravel性能
- 如何优化Laravel性能(17 种方法)
Laravel性能优化的重要性
开发者在发布之前必须非常关注每个Laravel应用程序的性能,以确保其成功。这是Laravel开发人员应该具备的几个品质之一。
通过代码调整和命令来优化Laravel性能可以帮助实现这一点,并且可以对你的应用程序的效率产生重大影响。
Laravel慢吗?
Laravel是一个快速的框架,带有大量特性和功能(例如Memcache、数据库支持、Redis 等)以帮助提高性能。Laravel还让软件专业人员能够以相对较少的精力来生成健壮的代码来满足他们大大小小的项目目标。由于数据以键值对的形式存储在服务器的RAM中,因此用户可以尽可能多地缓存,以快速流畅地维护他们的应用程序或网站。Laravel基于Google Trend,是目前最流行的PHP后端工具。
Laravel在Google上的受欢迎程度(图片来源:Google Trend)
最近发布的Laravel 9提供了新的性能改进。例如,它具有最小的PHP规范,并且需要Symphony 6.0,它在PHP 8.1上运行速度提高了20.65%。route:list命令的新设计现在减少了复杂命令的混乱视图。Laravel 9还包括一个更高效的查询构建器接口,以及更多的特性。
然而,一些因素导致Laravel性能缓慢。很多开发者有不良习惯,比如上传大量重图,使用旧的PHP版本,编译大量不需要的数据,或者忽略从项目中删除不必要的文件。
Laravel复杂的MVC PHP架构和相关库提供了安全性、性能和可用性的完美结合。这就是为什么学习一些Laravel优化技巧来获得更高性能是一个很好的经验法则。
网站速度很重要
对于任何品牌形象来说,第一印象都是持久的。网站速度是您给网站访问者留下的第一印象。您是否知道大约50%的在线客户会放弃加载时间超过3秒的网站?
网站速度(图片来源:Cuso Magazine)
网站速度(又名网站性能)是指浏览器从特定网站加载完全可操作的网页所花费的时间。因此,它对用户体验(UX)和转化率有直接影响。
网站性能也会影响您在搜索引擎上的SEO排名。如果有多个网站提供您的访问者所寻求的信息,那么速度更快的网页将首先出现。如果您的网站运行缓慢,那么它在Google搜索结果中排名靠前的可能性就会降低。
因此,您应该投入一些时间来应用有效的网站性能优化解决方案。
Laravel性能优化的好处
虽然你可能设计了一个很棒的Laravel应用程序,但总有改进的余地以达到完美。提高Laravel性能有很多好处:
- 促进业务增长:改进的Laravel性能意味着更高效的网站或应用程序。因此,您接触更广泛受众的机会就会增加。
- 更流畅的开发环境:下面列出的Laravel性能优化技巧可帮助开发人员节省更多的编码时间,更快地执行任务,并消耗更少的资源。
- 更好地处理流量:学习如何巧妙地使用Laravel队列系统可以帮助您的网站在增长和获取大量流量时管理请求数量。
如何测量Laravel性能
你已经投入了大量的时间和精力来让你的时髦的网络应用程序运行起来,但是如果它很慢,没有人会使用它,你就会像头疼的熊一样。这就是Laravel性能测试的用武之地。
您可以使用各种工具对您宝贵的创作进行性能测试。让我们来看看其中的三个。
1. Blackfire.io
Blackfire.io(来源:Blackfire.io)
Blackfire.io是一个直观的Web应用程序分析器,可识别基本路径,因此您可以专注于PHP应用程序的重要领域。
它包括多个性能监控功能并显示内存使用情况、CPU时间以及I/O。Blackfire.io还允许您对函数调用和路径进行排序,以查看您的Laravel应用程序是如何工作的。
2. Laravel Dusk
Laravel Dusk(来源:ELSNER)
Laravel Dusk让您可以测试您的应用程序并从用户的角度检查它的功能。您无需安装Selenium或JDK即可使用Dusk,因为它默认包含Chromedriver。
使用Dusk等开发人员友好的API,您可以自动执行浏览器测试,无需ChromeDriver和PHP WebDriver分别要求的严格流程。
此外,Dusk存储失败测试的屏幕截图和浏览器控制台输出,以便您能够找出任何错误。
3.LoadForge
LoadForge(来源:LoadForge)
LoadForge为Laravel量身定制,自动扫描您的网站,识别问题,并提供全面的图表以及每个页面的性能统计信息。
在Chrome中,LoadForge允许您捕获浏览器操作,然后将它们转换为LoadForge测试。通过这种方式,您将能够通过模拟用户登录、浏览您的网站甚至下订单来创建逼真的用户体验。
如何优化Laravel性能(17种方法)
在本节中,我们将通过细齿梳来帮助您提高Laravel性能的一些最佳想法和策略。
1. 路由缓存
路由缓存是一项出色的功能,特别是对于具有大量配置和分布在代码中的路由的应用程序。它是将一组路线打包在一个命令中,以帮助减少手动绘制路线图的繁琐任务。因此,您网站的页面将加载得更快。
路由缓存允许Laravel定期从预编译的缓存中检索路由,而不必为每个新用户从头开始。
使用此命令缓存所需的路由数据:
php artisan route:cache
请记住,当用户离开您的站点时,缓存就会过期。每次对您的网站进行结构更改(例如路由文件和配置)后运行该路由缓存命令也很重要,因为之后所做的任何修改都不会生效。
如果要清除路由缓存,请运行以下命令:
php artisan route:clear
2.Optimize Composer
Laravel使用一个名为Composer的单独工具来管理不同的依赖项。当您最初安装Composer时,默认情况下它会将开发依赖项加载到您的系统中。
这些依赖项对于开发网站很有用。但是,一旦您的网站完全投入运营,就不再需要它们,事实上,它们只会减慢速度。
在使用Composer安装包时,使用--no-dev
和-o
参数删除开发依赖:
composer install --prefer-dist --no-dev -o
此命令允许Composer创建用于优化自动加载器和提高性能的目录。它只是请求获取和打包官方发行版,没有开发依赖项。
注意不要消除任何运行时依赖项。这可能会危及您网站的性能,甚至导致其崩溃。
3.减少自动加载的服务
Laravel的目标是让开发过程尽可能轻松。例如,当您启动Laravel时,它会自动加载config/app.php文件中列出的大量服务提供程序,以帮助您快速开始您的项目。
虽然这是Laravel的一个有益步骤,但您不需要使用所有这些服务来构建应用程序。
以REST API为例。您不需要View Service Provider或Session Service Provider等服务。此外,许多开发人员不遵循默认的框架设置。您可以简单地禁用对您的需求多余的服务(例如分页服务提供者、翻译服务提供者、身份验证服务提供者等)。
通过将相同的原理应用于其他应用程序,您将能够提高Laravel应用程序的速度。只要确保你没有删除任何重要的服务,并在你放下锤子之前仔细检查一切。
4. 有效使用Artisan命令和缓存
Artisan是Laravel自带的一个流行的命令行工具。它使开发人员可以轻松地自动执行重复性和复杂的任务。网站创建者也可以使用它来进行测试和生成命令。
巧妙地使用Artisan命令可以提高您的应用程序性能。下面,我们列出了几个您可以使用的最佳缓存命令。
配置缓存
缓存配置是获得速度提升的绝佳命令。它将应用程序的所有配置值编译到一个文件中,以便框架可以更快地加载。您只需要运行:
php artisan config:cache
请注意,您不应在本地开发期间执行配置缓存命令。这是因为在您的应用程序开发过程中可能需要经常更改配置设置。
要清除配置缓存,请运行以下命令:
php artisan config:clear
视图缓存
视图缓存是包含缓存的应用程序的另一个方面。视图缓存存储生成的 Blade 模板以提高项目的速度。您可以使用下面的 artisan 命令手动编译所有视图并优化性能:
php artisan view:cache
上传新代码时记得清除缓存;否则,Laravel将使用您的旧视图,您将花费大量时间尝试解决此问题。运行以下命令清除视图缓存:
php artisan view:clear
应用缓存
这是Laravel中的主要缓存。它保存您在应用程序中手动缓存的所有数据。使用Laravel的缓存是加速常用数据和优化Laravel性能的一种聪明方法。如果您使用标签或多个缓存存储,则只能刷新缓存的某些元素。
这是清除Laravel缓存的artisan命令:
php artisan cache:clear
请记住,此命令不会删除/bootstrap/cache/文件夹中的任何路由、配置或视图缓存。
5.减少包装使用
作为一个拥有大量社区的开源框架,在Laravel中看到越来越多的包发布或现有包中的新版本是很自然的。您可以直接在您的应用程序中自由使用它们及其功能。
您必须在文件composer.json
中包含这些包。Laravel随后将安装它们以及它们的依赖项。
然而,在向任何应用程序添加新包之前,需要考虑一些因素。例如,它们并非都是为同一目的而设计的。还创建了一些包来执行广泛的功能。
当您包含具有大量依赖项的包时,应用程序的大小会增加,其性能最终会受到影响。这就是为什么在添加任何包之前仔细检查依赖关系至关重要的原因。
6.升级到最新版本的PHP
就像任何其他代码或软件程序一样,最好将您的PHP版本更新到最新版本。
使用最新PHP版本的主要原因是安全性。两年来,每个PHP版本都会收到安全补丁和错误修复。如果您继续使用不再维护的早期版本,您的系统可能会受到威胁。
许多开发人员可能还没有意识到PHP版本越旧,其性能就越慢。为了提高效率,当前的PHP版本具有出色的性能改进,例如更快地执行请求、枚举、纤程和继承缓存。
7.使用队列
将缓慢的任务卸载到队列作业是一种快速最大化Laravel应用程序速度的简单技术。
有时您不需要立即使用UI中的信息。在这种情况下,此类任务可以推迟并稍后通过单独的进程在后台运行(例如发送电子邮件)。这可以显着提高应用程序在线请求的性能。
使用队列发送电子邮件的示例(图片来源:GeekFlare)
Laravel支持多种队列驱动程序,例如IronMQ、Redis、Amazon SQS和Beanstalkd。它还包括一个内置的队列工作者,可以使用以下命令执行:
php artisan queue:work
您可以使用以下方法将新作业添加到队列中:
Queue::push('SendEmail', array('message' => $message));
如果您想推迟执行其中一个排队的作业,请通过Carbon使用以下方法。例如,假设您要安排在客户创建帐户后10分钟向客户发送电子邮件的作业:
$date = Carbon::now()->addMinutes(10); Queue::later($date, 'SendEmail@send', array('message' => $message));
8.使用部署工具调用所有命令
好的,我们意识到这不是一个纯粹的Laravel性能技巧,但对于开发人员来说,它是一种极好的节省时间的技术,对于提高生产力同样重要。
Deployer是一个基于PHP的部署工具,允许您将代码部署到不同的服务器。它包括流行框架的脚本,例如Laravel、Symfony、Zend、Magento、CakePHP等。
如果您之前没有使用Composer来管理您的项目依赖项,那么您将很快熟悉Deployer。使用此工具可自动执行所有机器部署操作,例如启动服务器、克隆到远程服务器和监控远程主机。
Deployer具有使用单个命令在Laravel应用程序中执行迁移、种子和优化功能的设置:
php deployer.phar deploy production
9. 在小型项目中使用Lumen
有时开发小型应用程序(例如移动或Angular应用程序)不需要使用像Laravel这样的全栈框架。在这种情况下,请考虑改用Lumen。
Lumen是由Laravel的同一创建者开发的微框架。就像Laravel的轻量级版本一样,Lumen是关于微服务的速度和性能的。在构建Web应用程序时,它需要最少的设置和替代路由参数,从而加快开发过程。
例如,Lumen每秒可以处理100个请求。您还可以集成来自第三方的工具或软件包以获得新功能。此外,Lumen支持所有平台并允许您升级到Laravel。
10. 利用JIT编译器
PHP是一种服务器端语言,需要解释器将代码翻译成计算机可以理解的字节码。
这个过程需要大量的时间并且消耗大量的资源。这就是为什么程序员会使用Zend引擎之类的脚本引擎来执行C子例程,每次执行应用程序时都必须重复这些子例程,这会减慢您的应用程序的速度。
为了提高效率,开发人员使用即时 (JIT) 编译器重复该过程一次。HHVM是由Facebook发明并广泛使用的,是Laravel的首选JIT编译器。Etsy、维基百科和许多其他网站也使用它。
11. 利用即时加载
为了愉快地与数据库交互,Laravel提供了一个很棒的对象关系映射器 (ORM),称为Eloquent。它使您能够以简单的格式关联表并处理PHP中的所有CRUD函数。
当您从数据库中检索模型,然后对它们的关系执行任何类型的处理时,关系数据是“延迟加载的”。这意味着在您访问关系之前不会加载数据。
您最终将运行N+1个查询以通过延迟加载找到您的响应,如以下示例所示:
$books = AppBook::all(); foreach ($books as $book) { echo $book->author->name; }
为了优化Laravel性能并解决N+1查询问题,Laravel 可以“即时加载”数据,如下所示:
$books = AppBook::with('author')->get(); foreach ($books as $book) { echo $book->author->name; }
12.压缩图像
图像在网站设计中起着重要作用。它们对于增强用户体验 (UX) 和提升搜索排名至关重要。
一个网站的平均加载时间是两秒。沉重的图像会降低网站的加载速度。如果您的网站速度较慢,那么您很有可能最终会失去许多访问者。
图像压缩可在不牺牲质量的情况下最小化原始图像的大小,有助于优化网站速度。出于这个原因,Laravel提供了简洁的照片压缩选项,例如TinyPNG、reSmush.it或ImageMin。
13. 使用CDN
使用内容交付网络 (CDN)可以真正优化Laravel性能。通过从CDN服务器而不是直接从托管文件的机器加载静态内容,数据可以更快地到达您的受众。
换句话说,它将您网站的最新版本缓存到全球云服务器网络。因此,即使您的访问者在地理位置上远离您的位置,他们仍然能够快速访问您的网站。
Cloudflare允许从您的主域而不是辅助CDN域传递您网站的缓存文件,从而提高您的SEO排名。
CDN还有助于从您的JavaScript (JS)和CSS文件中删除不需要的组件。这大大减少了网站页面加载所需的时间,并减少了带宽消耗。
14. 最小化JS和CSS代码
在继续进行资产捆绑过程之前,通过最小化JavaScript和CSS文件来提高Laravel性能。
此缩小步骤会从您的应用程序中删除任何不必要的代码,例如空格、注释和使用缩短名称的变量重命名。如有必要,您可以调整图像大小以创建缩略图。
因此,您将改善您的用户体验,同时减少HTTP调用。
15. 使用资产捆绑
有几种工具可用于将Javascript和CSS之类的文件压缩和捆绑到一个文件中,例如Laravel Mix和Laravel Packer。
所有Laravel应用程序都默认包含Laravel Mix。它是一个用户友好的API,用于为您的PHP应用程序创建Webpack构建,使用一系列常见的JavaScript和CSS预处理器。
假设您的应用程序文件需要一定的样式格式集合,您可以输入如下内容:
mix.styles([ 'public/css/vendor/normalize.css', 'public/css/styles.css' ], 'public/css/all.css');
现在,Laravel Mix会自动all.css
从normalize.css
和style.css
文件生成一个文件。因此,您可以将它们组合成一个all.css文件,而不是单独获取每个样式表。
Laravel Packer是一个命令行工具,可以通过Composer安装。它可以让你减少和捆绑你的JS和CSS代码。但是,它比Laravel Mix更难使用。
尽管这个技巧对于提升Laravel性能非常有用,但合并大量文件会使其变得庞大并最终产生相反的效果。要解决此问题,请使用Laravel Mix通过运行以下命令来缩小文件:
npm run prod
16. 限制包含的库
Laravel让您可以自由添加任意数量的库。虽然这是一个很棒的功能,但添加大量库会给应用程序的性能带来很大压力。它还会影响整个用户体验。
因此,扫描代码中当前使用的所有库数据至关重要。您可以在config/app.php file
. 在检查库时,删除您知道对您不再有用的库。
composer.json
检查不需要的依赖项也是一个好主意。
17.考虑使用New Relic
New Relic是开发人员在其Laravel应用程序中集成的应用程序性能管理 (APM) 工具。它用于分析和监控反映其性能的统计数据,以优化效率并避免实时中断。
New Relic可以帮助您评估Apdex分数并衡量您的应用与市场上的竞争对手相比如何。它还使您能够根据您的条件创建警报策略。
小结
Laravel是一个快速发展的PHP框架,有很多教程可供各类用户学习Laravel,无论他们的知识水平如何。
当谈到数字世界中的用户体验时,性能是建立强大在线形象的关键因素。组织投入更多时间和资源来提供高质量的用户体验也就不足为奇了。
如果您是Laravel开发人员,您可以确信通过使用上述方法,您会发现性能有了显着提高,并且能够保持应用程序的流畅运行。
原文地址:https://www.wbolt.com/laravel-performance.html