推荐18个Laravel性能优化的必备技巧

                                                                               

laravel 是一个流行的开源 php 框架,以其强大的安全性和简单而复杂的编码架构而闻名。它是构建能够推动收入和推动业务发展的尖端 web 应用程序的绝佳选择。

如今,没有一个 PHP 开发人员不受 Laravel 的影响。他们要么是喜欢 Laravel 提供的快速开发的初级或中级开发人员,要么是由于市场压力而被迫学习 Laravel 的高级开发人员。

拥有超过 100 万个由 Laravel 提供支持的网站,谷歌推动了网站速度的重要性,除了令人难以置信的流畅用户体验之外,用户越来越不接受任何其他东西 ,有些人正在给 PHP 和 Laravel 等框架提供性能不如其他框架的声誉构架。虽然这很可能是事实,但这并不意味着你对此无能为力。因此,在本指南中,我们将深入探讨如何优化 Laravel 的性能。

目前,Laravel 已经成为开发商业和电子商务应用程序的一个非常流行的框架。大多数组织都喜欢用 Laravel 来构建他们的业务应用程序。原因有很多。但是今天我们只关注性能优化。

Laravel 的性能优化为何如此重要?

这篇文章将介绍几个重要的技巧,每个步骤指导优化你的 Laravel 网站。虽然有些步骤可能听起来很有技术含量,但这些步骤很容易遵循并在你自己的屏幕上重新创建。

1. 路由缓存

Laravel 允许缓存路由。你可以执行 Artisan 命令:

php artisan route:cache

所有的路由都会缓存在 routes.php 文件中。

下次需要路由时,将访问缓存而不是路由文件。这可以通过快速路由请求来提高站点性能。

要清除缓存,可以使用类似的命令:

php artisan route:clear

路由缓存是一种可以让你的网站更流畅、加载更快的简单方法。

2. 有效的使用 Artisan 命令

Laravel 最好的特性之一是它的命令行工具 Artisan 。如果有效地使用它,可以提高应用程序的性能。

你可以缓存路由和配置。你可以执行下面的命令来缓存配置和路由:

php artisan config:cachephp artisan route:cache

Note: Artisan Optimize 在 Laravel 5.5 中被移除,在之前的版本中可以工作。

php artisan optimize --force

在添加新配置或新路由时,一定要记得清除缓存。可以使用下面的命令有效地清除缓存。

php artisan config:clearphp artisan route:cachephp artisan view:clear

3. 配置缓存

Laravel 提供了一个非常有趣的命令:Artisan Cache Config,它对提升性能非常有帮助。命令的基本用法是:

php artisan config:cache

缓存配置后,不会对你所做的更改产生任何影响。 如果你想刷新配置,只需再次运行上述命令。如果需要清除配置缓存,请使用以下命令:

php artisan config:clear

4. 直接获取数据

当你在 Laravel 中执行任何查询时,Laravel会延迟执行该查询(懒加载),它仅在需要时获取数据。

在某些情况下,这种延迟加载行为会增加执行的查询数,同时会降低应用程序的性能。

让我们看一个简单的例子来详细了解这种行为。 如果你想获取图书馆中书籍的作者姓名。

使用延迟加载,你最终将执行 N+1 个查询来查找结果。 你可以从下面的代码示例中看到它。

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

在下面的代码中,每次执行 for 循环时,都会执行查询。 为了解决这个问题,Laravel 允许你直接加载数据。

这会增加你的查询执行时间并减少查询数量。 下面的代码示例展示了我们如何在一个查询中轻松加载完整列表。

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

让我们看一个简单的例子来详细了解这种行为。
如果想获取图书馆中书籍的作者姓名。

如果不使用预先加载,最终将执行 N+1 个查询来查找结果。
你可以从下面的代码示例中看到它。

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

在下面的代码中,每次执行 for 循环时,都会执行一次查询。
为了解决这个问题,Laravel 允许预先加载关联数据。

这会增加的查询执行时间并减少查询次数。
下面的代码示例展示了我们如何在一个查询中轻松加载完整列表。

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

5.  Composer 优化

Laravel 使用一个名为 Composer 的包管理工具来管理不同的依赖项。 当你最初安装 Composer 时,默认情况下它会将开发依赖项加载到你的系统中。

这些依赖项对于开发网站很有用。 但是,一旦你的网站完全投入运营,就不再需要它们,事实上,它们只会减慢速度。

当使用 Composer 安装包时,使用 --no-dev-o 参数来移除 dev 依赖:

composer install --prefer-dist --no-dev -o

此命令允许 Composer 创建用于优化自动加载器和提高性能的目录。 它只是请求获取和打包官方发行版,没有开发依赖项。

注意不要消除任何运行时依赖项。 这可能会危及网站的性能,甚至导致其崩溃。

6. 压缩绑定配置

Laravel mix 可以在这里为你提供帮助,它编译所有 CSS 并提供单个 app.css 文件,从而将多个 HTTP 请求减少为单个。 你还可以使用 laravel-mix-purgecss 包从项目中删除未使用的 CSS,只需将其安装在你的开发项目中:

npm install laravel-mix-purgecss --save-dev# oryarn add laravel-mix-purgecss --dev

在你的文件 webpack.mix.js

const mix = require('laravel-mix');require('laravel-mix-purgecss');mix.js('resources/js/app.js', 'public/js').sass('resources/sass/app.scss', 'public/css').purgeCss();

7. 队列

Laravel 队列就像你的 CPU 一样工作。 每当你的计算机处理一项任务时,它都会以最有效的方式执行,而不会降低用户体验的质量。 这意味着当你渲染文件或执行资源密集型操作时,你的 CPU 会确保你仍有剩余的处理能力用于其他任务,直到达到其限制。

例如,当用户注册到网站时,我们必须在后端执行许多操作,例如存储用户信息、发送激活邮件、发送欢迎邮件等。如果我们只是发送一封邮件(没有队列),那么它会大约需要 4-5 秒。并且用户必须等到请求。因此,对于队列,我们只需要在执行所需的验证并显示用户成功消息后将操作推送到队列中。之后,我们只需要在队列执行时处理基本的事务。

简单的例子是:

发送电子邮件下载文件上传文件

这些任务不需要用户看到,可以作为后台进程完成。

Laravel 还有几个队列驱动程序支持文档,并为每个文档提供独特的解决方案,例如 Horizon,一个监控队列系统的仪表板。

8. 快速缓存或会话驱动程序

为了提高 Laravel 应用程序的性能,我们可以存储会话并将它们缓存在 RAM 中。 Memcached 是最好和最快的缓存和会话驱动程序。 Laravel 可以灵活地将一个缓存/会话驱动器切换到另一个。

对于会话驱动,我们可以在 config/session.php 中更改驱动键,对于缓存,我们可以在 config/cache.php 文件中更改驱动键。

9. 数据库索引

当我们谈论提高应用程序的性能时,我们会遵循 Laravel 中的许多实践,例如缓存、数据加载、资产缩小等。但是还有一件事可以帮助我们提高性能,即数据库索引。 这基本上是一种数据库级技术。

在技术实现的角度看,数据库索引是基于数据库表的一个或多个列的数据结构。索引背后的主要思想是加快数据检索。它有助于轻松定位数据,而无需在每次访问数据库时遍历每一行。

使用列,索引有助于最小化处理的每个查询的磁盘访问。使数据库索引成为一种强大的数据库优化技术还可以提高数据库的整体性能。

在 Laravel 中,我们可以使用迁移来创建索引。下面是示例:

Schema::create(‘users’, function (Blueprint $table) {   $table->string(’email’)->index();   });

10. 利用 JIT 编译器

PHP 是一种计算机机器和服务器端语言。它本身不理解 PHP 代码。通常,程序员使用编译器将代码编译成字节码并解释 PHP 代码。程序编译过程会影响 Laravel 应用程序的性能和用户体验。所以,Laravel 程序员可以使用 Zend Engine 自带的即时编译器来快速编译代码。

11. 压缩图像

如果你的项目中包含许多图像,你应该压缩所有图像以优化性能。
有一些方法可以进行优化。
但是不同的图像需要不同的工具来保持图像的质量和分辨率。

如果你使用 Laravel Mix,建议在编译图像时使用像 ImageMin 这样的 NPM 包。
对于非常大的图片,先试试 TinyPNG 压缩图片,然后再用 ImageMin 尽量压缩。

12. 视图缓存

另一个方面是视图缓存。
视图缓存存储编译后的的 Blade 模板以提高项目的速度。
你可以使用下面的 artisan 命令手动编译所有视图并优化性能:

php artisan view:cache

上传新代码时记得清除缓存;否则,Laravel 将使用你的旧视图,你将花费大量时间尝试解决此问题。运行以下命令清除视图缓存:

php artisan view:clear

13. 删除未使用的服务

你可以使用 Laravel 提供的服务容器框架轻松地注入服务。你只需在 config/app.php 文件中的 providers[] 数组中添加服务的名称。

但同时,你应该只打开你正在使用的那些服务。应停止所有其他未使用的服务。

你可以通过在 config/app.php 文件中注释掉这些服务来停止这些服务。这将减少你的应用程序启动所需的时间并提高其性能

14. 使用 CDN 加载静态内容

CDN 是在全球范围内加载静态内容的好方法。如果你的应用程序越来越流行,你可能需要为你的应用程序使用 CDN 服务

让我举一个简单的例子,你在美国的服务器上托管了你的应用程序。现在,如果你有来自印度的请求,你需要很长时间才能为该请求提供内容。

为了解决这个问题,CDN 应运而生。 CDN 可以帮你缓存多个静态页面。现在你的请求将首先到达 CDN,如果内容存在于 CDN 中,则直接提供页面。这极大地提高了你的内容服务速度以及最终用户体验。

15. 压缩 CSS 和 JS

在生产环境中实际捆绑这些文件之前,你应该始终压缩 CSS 和 JavaScript 文件。 这将增强你的用户体验并减少 HTTP 调用。 这是一个很棒的 Laravel 性能优化技巧。

有多种工具可用于压缩这些文件并将它们捆绑为单个文件。 你可以使用 Laravel-packer,它允许你打包和压缩你的 CSS 和 JavaScript 代码。 如果需要,你还可以调整图像大小以生成缩略图。

16. 移除开发依赖

首次安装 Laravel 或 composer 时,通常会默认将开发依赖项注入到你的系统中。 虽然这些依赖项确实有助于构建你的网站,但当你的网站启动并运行时,你不需要这些依赖项。

你可以通过 Artisan 输入这个简单的命令来删除这些依赖项:

composer install --prefer-dist --no-dev -o

注意: 开发依赖项不同于运行时所需的依赖项。 不要删除运行时依赖项,因为这可能会影响你网站的性能,甚至会导致你网站的某些部分崩溃。

17. 将Lumen用于小型项目

有时开发小型应用程序(例如移动或 Angular 应用程序)不需要使用像 Laravel 这样的全栈框架。 在这种情况下,请考虑改用 Lumen。

Lumen 是由 Laravel 的同一创建者开发的微框架。 就像 Laravel 的轻量级版本一样,Lumen 是关于微服务的速度和性能的。 在构建 Web 应用程序时,它需要最少的设置和替代路由参数,从而加快开发过程。

例如,Lumen 每秒可以处理 100 个请求。 你还可以集成来自第三方的工具或软件包以获得新功能。 此外,Lumen 支持所有平台并允许你升级到 Laravel。

18. 限制包含的库

Laravel 让你可以自由添加任意数量的库。 虽然这是一个很棒的功能,但添加大量库会给应用程序的性能带来很大压力。 它还会影响整个用户体验。

因此,扫描代码中当前使用的所有库数据至关重要。 你可以在 config/app.php 文件中找到这些库。 在检查库时,删除你知道对你不再有用的库。

查看 composer.json 中不需要的依赖项也是一个好办法。

感谢你们的阅读!

原文地址:https://devdojo.com/techvblogs/how-to-optimize-laravel-for-performance

译文地址:https://learnku.com/laravel/t/69775

以上就是推荐18个Laravel性能优化的必备技巧的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/69308.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月12日 23:01:26
下一篇 2025年11月12日 23:27:55

相关推荐

  • PHP如何过滤数据库查询_PHP数据库查询安全规范

    答案是全面采用预处理语句并结合输入验证、最小权限原则和输出转义等多层防御措施。核心在于不信任用户输入,使用PDO或MySQLi的预处理功能将SQL逻辑与数据分离,通过绑定参数防止恶意代码执行;同时对动态查询部分采用白名单机制或动态生成占位符,在确保安全的前提下实现灵活性。 数据库查询的安全性,在我看…

    2025年12月11日
    000
  • PHP怎么设置路由_PHP路由配置与重写方法

    路由是PHP程序响应URL请求的核心机制,它将不同URL映射到对应处理逻辑。在Laravel等框架中,通过Route::get(‘/users/{id}’, ‘UserController@show’)定义路由,框架自动解析URL并传递参数给控制器方法…

    2025年12月11日
    000
  • Laravel 中保持下拉列表选择状态的教程

    本文旨在解决 Laravel 应用中,在表单提交后下拉列表重置的问题。通过利用 Laravel 的请求对象,我们可以轻松地在页面刷新后保持用户在下拉列表中所做的选择,提升用户体验。本文将详细介绍如何实现这一功能,并提供示例代码和注意事项。 在 Laravel 应用中,表单提交后页面刷新,下拉列表恢复…

    2025年12月11日
    000
  • php如何实现一个简单的REST API?php构建RESTful API基础教程

    核心是通过PHP处理HTTP请求并返回JSON响应。需设计URI、选择HTTP方法、实现路由与数据处理。示例中根据GET请求返回用户信息,支持单个或全部用户查询,并返回对应状态码。POST请求通过解析php://input获取JSON数据,验证后创建新用户并返回201状态码。安全方面需过滤输入防止注…

    2025年12月11日
    000
  • Laravel 中表单提交后如何保持下拉列表的选中状态

    本文旨在解决 Laravel 应用中表单提交后下拉列表(select)重置的问题。通过利用 Laravel 提供的 request 对象和旧输入值功能,我们能够轻松地在页面刷新后保持用户在下拉列表中选择的选项,从而提升用户体验。本文将详细介绍如何在视图中正确地处理下拉列表的选中状态,并提供相应的代码…

    2025年12月11日
    000
  • Laravel 中下拉列表选择后重置问题的解决

    本文旨在解决 Laravel 应用中下拉列表在提交后重置的问题。通过利用 Laravel 的请求对象,我们将演示如何在页面刷新后保持用户在下拉列表中选择的选项,从而提升用户体验。文章将提供详细的代码示例和解释,帮助开发者轻松实现该功能。 在 Laravel 应用中,经常会遇到需要在表单提交后保持用户…

    2025年12月11日
    000
  • Laravel Redis队列任务清理指南:兼顾旧版本与Laravel 8+

    本文详细介绍了在Laravel应用中清空Redis队列任务的方法。对于Laravel 8及更高版本,可使用内置的php artisan queue:clear命令;而对于Laravel 8之前的版本,则需通过创建自定义Artisan命令来直接操作Redis键,实现队列任务的快速清理,尤其适用于开发环…

    2025年12月11日
    100
  • PHP如何防止SQL注入_PHP防范SQL注入攻击的核心策略

    防范SQL注入的核心是预处理语句,它通过将SQL逻辑与数据分离,确保用户输入始终作为数据处理;结合参数绑定,使用PDO或MySQLi扩展可有效阻止恶意SQL执行,从根本上避免注入风险。 PHP防范SQL注入的核心策略,毫无疑问是采用预处理语句(Prepared Statements)配合参数绑定(P…

    2025年12月11日
    000
  • 精确控制JavaScript定时任务:实现整点弹窗与桌面通知

    本文详细阐述了如何利用JavaScript精确控制定时任务,以实现在指定时间(例如每小时的整点)触发弹窗或发送桌面通知。通过结合短间隔定时器、日期对象判断和防重复触发机制,解决了传统setInterval无法实现整点触发的问题,并提供了完整的代码示例及桌面通知的实现方法。 1. 理解传统定时器的局限…

    2025年12月11日
    000
  • 在 Laravel Nova 中通过邮件发送文件附件的教程

    在 Laravel Nova 环境下,通过 Mailable 类为电子邮件添加文件附件是一项常见需求。本教程将详细指导您如何实现这一功能,涵盖从 Nova Resource 定义到 Mailable build 方法中附件功能的实现,包括如何获取文件路径、使用 attach 方法以及相关注意事项,确…

    2025年12月11日
    000
  • Laravel教程:高效展示项目标题及其关联问题列表

    本教程旨在指导您如何在Laravel应用中高效地展示特定项目的标题及其关联问题列表。通过优化控制器逻辑,将完整的项目模型传递至视图,并利用Eloquent关系在视图中直接访问项目属性及循环其关联问题,从而实现代码的简洁与逻辑的清晰,提升开发效率与代码可维护性。 在构建项目管理或任务追踪系统时,一个常…

    2025年12月11日
    000
  • php中的匿名函数(闭包)如何使用?PHP匿名函数与闭包使用指南

    答案:PHP匿名函数即闭包,可赋值给变量、作为参数传递,并通过use捕获外部变量;值捕获复制变量,引用捕获(&)可修改外部变量;常用于回调、事件处理和路由定义;需注意避免过度嵌套、误用引用及调试困难,建议保持简洁、明确use变量并合理使用类型提示。 PHP中的匿名函数,通常我们称之为闭包(C…

    2025年12月11日
    000
  • php如何统计代码执行时间 php脚本性能分析与执行时间计算

    使用microtime()或hrtime()测量PHP代码执行时间,结合Xdebug、Blackfire、Tideways、xhprof/xhgui或APM工具进行性能分析,通过优化数据库查询、循环、算法及使用缓存等方式提升性能。 直接告诉你,用 microtime() 函数,配合一些简单的数学运算…

    2025年12月11日
    000
  • php中的魔术方法__get和__set怎么用?PHP魔术方法__get与__set使用指南

    __get和__set用于拦截对象中不存在或不可访问属性的读写操作,实现动态属性访问、数据验证与惰性加载,常用于配置管理、ORM及代理模式,但需注意性能开销、可读性及IDE支持等问题。 PHP中的魔术方法 __get 和 __set 主要用于处理对象中“不存在”或“不可访问”的属性。简单来说,当你尝…

    2025年12月11日
    000
  • MySQL与PHP:高效判断指定时间是否落在数据库日期区间内

    本教程详细阐述如何利用MySQL的BETWEEN操作符和DATE()函数,结合PHP实现高效且准确的日期时间区间判断。文章将指导读者优化SQL查询,避免冗余格式化,并区分全天候与精确时间比较两种场景。同时,将介绍通过SELECT 1 LIMIT 1提升查询存在性判断的性能,确保在数据库中快速验证指定…

    2025年12月11日
    000
  • 在Laravel应用中获取调用辅助函数的控制器和方法

    本文探讨了在Laravel辅助函数中,如何在不显式传递参数的情况下,动态获取调用该辅助函数的控制器名称及其方法。通过利用PHP的调试回溯机制,特别是借助spatie/backtrace包,可以高效且可靠地实现这一目标。文章提供了两种实现方案:直接在辅助函数中集成回溯逻辑,以及通过修改Laravel的…

    2025年12月11日
    000
  • 高效管理Laravel数据库队列:取消与清理策略

    本文深入探讨了Laravel框架中基于数据库的队列任务管理,特别是如何有效取消和清理待处理及已失败的任务。我们将详细介绍Laravel Artisan命令在批量管理任务方面的应用,并阐明在特定场景下,如何通过直接数据库操作来精确取消单个待处理任务,同时强调了操作的注意事项与最佳实践,以确保队列系统的…

    2025年12月11日
    000
  • Laravel 数据库队列:取消延迟任务与管理策略

    本文详细探讨了在 Laravel 应用程序中使用数据库队列时,如何有效取消和管理待处理任务。我们将介绍直接删除数据库记录的原理,并重点讲解 php artisan queue:clear 等命令行工具,以确保任务取消的正确性和系统稳定性,尤其针对延迟任务和重试机制。 在使用 laravel 构建应用…

    2025年12月11日
    000
  • 在 Laravel 中实现最近浏览商品功能及常见问题解决

    本文详细介绍了如何在 Laravel 7+ 中利用 Cookie 实现“最近浏览商品”功能。教程涵盖了从商品数据存储、Cookie 管理(包括 JSON 编码/解码、去重、数量限制)到前端 Blade 模板展示的完整流程。特别强调了在操作 Cookie 时保持键名一致性的重要性,以避免常见的逻辑错误…

    2025年12月11日
    000
  • php如何设置HTTP状态码?PHP HTTP状态码设置指南

    PHP中设置HTTP状态码主要用header()或http_response_code()函数,后者更简洁安全;需避免输出后设状态码、滥用302重定向等误区;在RESTful API中应准确使用状态码以明确请求结果、简化客户端逻辑;结合自定义错误页面和异常处理机制可提升用户体验与系统健壮性。 在PH…

    2025年12月11日
    000

发表回复

登录后才能评论
关注微信