Maison > cadre php > Laravel > Comment optimiser les performances de Laravel ? 18 partage de connaissances essentiels pour l'optimisation

Comment optimiser les performances de Laravel ? 18 partage de connaissances essentiels pour l'optimisation

青灯夜游
Libérer: 2022-12-02 21:24:21
avant
1895 Les gens l'ont consulté

Comment optimiser les performances de Laravel ? 18 partage de connaissances essentiels pour l'optimisation

Laravel est un framework PHP open source populaire connu pour sa sécurité renforcée et son architecture de codage simple mais complexe. C'est un excellent choix pour créer des applications Web de pointe qui génèrent des revenus et développent votre entreprise.

Aujourd’hui, il n’existe aucun développeur PHP qui ne soit influencé par Laravel. Il s'agit soit de développeurs juniors ou intermédiaires qui aiment le développement rapide proposé par Laravel, soit de développeurs seniors qui sont obligés d'apprendre Laravel en raison de la pression du marché.

Avec plus d'un million de sites Web alimentés par Laravel, Google a insisté sur l'importance de la vitesse des sites Web et les utilisateurs sont de moins en moins disposés à accepter autre chose qu'une expérience utilisateur incroyablement fluide, et certains donnent à PHP un framework comme Laravel et Laravel fournissent des architectures de réputation qui ne fonctionnent pas aussi bien que les autres frameworks. Même si cela peut être vrai, cela ne veut pas dire que vous ne pouvez rien y faire. Ainsi, dans ce guide, nous examinerons en profondeur comment optimiser les performances de Laravel.

Actuellement, Laravel est devenu un framework très populaire pour développer des applications commerciales et e-commerce. La plupart des organisations préfèrent utiliser Laravel pour créer leurs applications métier. Il y a plusieurs raisons. Mais aujourd’hui, nous nous concentrons uniquement sur l’optimisation des performances.

Pourquoi l'optimisation des performances de Laravel est-elle si importante ?

Cet article présentera plusieurs conseils importants et guidera chaque étape pour optimiser votre site Web Laravel. Même si certaines étapes peuvent sembler techniques, elles sont faciles à suivre et à recréer sur votre propre écran.

1. Mise en cache des routes

Laravel permet la mise en cache des routes. Vous pouvez exécuter la commande Artisan :

php artisan route:cache
Copier après la connexion

Toutes les routes seront mises en cache dans le fichier routes.php. routes.php 文件中。

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

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

php artisan route:clear
Copier après la connexion

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

2. 有效的使用 Artisan 命令

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

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

php artisan config:cache

php artisan route:cache
Copier après la connexion

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

php artisan optimize --force
Copier après la connexion

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

php artisan config:clear
php artisan route:cache
php artisan view:clear
Copier après la connexion

3. 配置缓存

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

php artisan config:cache
Copier après la connexion

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

php artisan config:clear
Copier après la connexion

4. 直接获取数据

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

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

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

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

$books = Book::all();foreach ($books as $book) {
  echo $book->author->name;}
Copier après la connexion
Copier après la connexion

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

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

$books = Book::with('author')->get();foreach ($books as $book) {
  echo $book->author->name;}
Copier après la connexion
Copier après la connexion

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

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

$books = Book::all();foreach ($books as $book) {
  echo $book->author->name;}
Copier après la connexion
Copier après la connexion

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

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

$books = Book::with('author')->get();foreach ($books as $book) {
  echo $book->author->name;}
Copier après la connexion
Copier après la connexion

5.  Composer 优化

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

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

当使用 Composer 安装包时,使用 --no-dev-o

La prochaine fois qu'un routage sera nécessaire, le cache sera accessible à la place du fichier de routage. Cela peut améliorer les performances du site en acheminant rapidement les demandes. 🎜🎜Pour vider votre cache, utilisez une commande telle que : 🎜
composer install --prefer-dist --no-dev -o
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
🎜La mise en cache d'itinéraire est un moyen simple de rendre votre site Web plus fluide et de se charger plus rapidement. 🎜🎜2. Utilisez efficacement les commandes Artisan 🎜🎜L'une des meilleures fonctionnalités de Laravel est son outil de ligne de commande Artisan. S'il est utilisé efficacement, il peut améliorer les performances de votre application. 🎜🎜Vous pouvez mettre en cache les itinéraires et les configurations. Vous pouvez exécuter la commande suivante pour mettre en cache la configuration et les itinéraires : 🎜
npm install laravel-mix-purgecss --save-dev

# or

yarn add laravel-mix-purgecss --dev
Copier après la connexion
Copier après la connexion
🎜Remarque : Artisan Optimize a été supprimé dans Laravel 5.5, il fonctionnait dans les versions précédentes. 🎜
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();
Copier après la connexion
Copier après la connexion
🎜N'oubliez pas de vider le cache lors de l'ajout de nouvelles configurations ou de nouveaux itinéraires. Le cache peut être vidé efficacement à l'aide de la commande ci-dessous. 🎜
Schema::create(‘users’, function (Blueprint $table) {
   $table->string(’email’)->index();});
Copier après la connexion
Copier après la connexion
🎜3. Configure cache🎜🎜Laravel fournit une commande très intéressante : Artisan Cache Config, qui est très utile pour améliorer les performances. L'utilisation de base de la commande est la suivante : 🎜
php artisan view:cache
Copier après la connexion
Copier après la connexion
🎜Une fois la configuration mise en cache, elle n'aura aucun impact sur les modifications que vous apportez. Si vous souhaitez actualiser la configuration, exécutez simplement à nouveau la commande ci-dessus. Si vous devez vider le cache de configuration, utilisez la commande suivante : 🎜
php artisan view:clear
Copier après la connexion
Copier après la connexion
🎜 4. Obtenez des données directement 🎜🎜 Lorsque vous exécutez une requête dans Laravel, Laravel La requête est exécutée paresseusement (chargement paresseux) et elle ne récupère les données qu'en cas de besoin. 🎜🎜Dans certains cas, ce comportement de chargement paresseux augmente le nombre de requêtes exécutées tout en dégradant les performances de l'application. 🎜🎜Regardons un exemple simple pour comprendre ce comportement en détail. Si vous souhaitez obtenir les noms d’auteurs des livres de la bibliothèque. 🎜🎜Avec le chargement paresseux, vous finirez par exécuter N+1 requêtes pour trouver des résultats. Vous pouvez le voir dans l'exemple de code ci-dessous. 🎜
composer install --prefer-dist --no-dev -o
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
🎜Dans le code ci-dessous, chaque fois que la boucle for est exécutée, la requête est exécutée. Pour résoudre ce problème, Laravel permet de charger directement les données. 🎜🎜Cela augmentera le temps d'exécution de vos requêtes et réduira le nombre de requêtes. L'exemple de code ci-dessous montre comment nous pouvons facilement charger une liste complète en une seule requête. 🎜rrreee🎜Regardons un exemple simple pour comprendre ce comportement en détail.
Si vous souhaitez obtenir le nom de l'auteur d'un livre présent dans la bibliothèque. 🎜🎜Si vous n'utilisez pas le chargement rapide, vous finirez par exécuter des requêtes N+1 pour trouver les résultats.
Vous pouvez le voir dans l'exemple de code ci-dessous. 🎜rrreee🎜Dans le code ci-dessous, chaque fois que la boucle for est exécutée, une requête est exécutée.
Pour résoudre ce problème, Laravel permet de précharger les données associées. 🎜🎜Cela augmentera le temps d'exécution des requêtes et réduira le nombre de requêtes.
L'exemple de code ci-dessous montre comment nous pouvons facilement charger une liste complète en une seule requête. 🎜rrreee🎜5. Optimisation de Composer🎜🎜Laravel utilise un outil de gestion de packages appelé Composer pour gérer différentes dépendances. Lorsque vous installez Composer pour la première fois, il charge par défaut les dépendances de développement sur votre système. 🎜🎜Ces dépendances sont utiles pour développer des sites Web. Cependant, une fois que votre site Web est pleinement opérationnel, ils ne sont plus nécessaires, en fait, ils ne feront que le ralentir. 🎜🎜Lorsque vous utilisez Composer pour installer le package, utilisez les paramètres --no-dev et -o pour supprimer la dépendance dev : 🎜
composer install --prefer-dist --no-dev -o
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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

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

6. 压缩绑定配置

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

npm install laravel-mix-purgecss --save-dev

# or

yarn add laravel-mix-purgecss --dev
Copier après la connexion
Copier après la connexion

在你的文件 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();
Copier après la connexion
Copier après la connexion

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();});
Copier après la connexion
Copier après la connexion

10. 利用 JIT 编译器

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

11. 压缩图像

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

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

12. 视图缓存

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

php artisan view:cache
Copier après la connexion
Copier après la connexion

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

php artisan view:clear
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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

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-op...

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

【相关推荐:laravel视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal