Laravel Optimisation de la vitesse et des performances 101 – La ligne directrice

vitesse-1249610_1920Je travaille sur un site Laravel assez lourd avec de nombreuses requêtes et de nombreux appels Eloquent/SQL. Même avec le VPS à mémoire et processeur élevés, j'ai senti qu'il y avait une marge d'amélioration des performances. C'est pourquoi je voudrais écrire quelques améliorations pour accélérer Laravel :

1. Utilisez la base de données ou Redis pour le cache et les sessions

Lorsque vous accédez à config/cache.php et config/session.php, vous voyez que les fichiers par défaut sont CACHE_DRIVER et SESSION_DRIVER =. Si vous avez installé Redis, essayez simplement de le définir comme pilote de cache et de session. Vérifiez si Redis est installé en exécutant :

redis-cli

S'il est installé, essayez de définir les pilotes dans votre fichier .env :

CACHE_DRIVER=redis SESSION_DRIVER=redis

2. Utilisez plusieurs commandes artisanales prédéfinies

Il existe plusieurs commandes d'artisan qui sont faites pour mettre en cache plusieurs parties de Laravel. Vous pouvez les configurer dans le processus de déploiement de Laravel Forge ou Envoyer :

route php artisan : cache configuration php artisan : cache php artisan optimize --force

 

Guide d'utilisation des outils de développement

Effectuez une exécution sur https://developers.google.com/web/fundamentals/performance/ et optimisez plusieurs étapes :

3. Optimisez les images comme les PNG et les JPEG

Les images contiennent parfois des données supplémentaires inutiles qui peuvent être optimisées sans perte. Vous pouvez donc utiliser les packages OptiPNG et JPEGOptim. Dans Ubuntu, installez OptiPNG :

sudo apt-get update sudo apt-get install option

Et installez également JPEGOptim :

sudo apt-get install jpegoptim

Accédez maintenant au dossier dont vous souhaitez optimiser les images. Pour optimiser, exécutez :

optant *

Pour exécuter jpegoptim :

pour i dans *.jpg ; faire jpegoptim --all-progressive "$i" ; terminé

Notez que les sous-répertoires peuvent également être optimisés

4. Utilisez HTTP2 au lieu de HTTP 1.1 si vous avez un certificat SSL activé

Le guide suivant vous aide à traverser le processus de mise à jour vers HTTP2 dans Nginx.

Notez que vous devez disposer d'un certificat SSL. Google PageSpeed a modifié la vitesse du serveur de 0,52 s (sans HTTP2, avec SSL) à 0,35 s (avec HTTP2)

Résultat : Augmentation de la vitesse d'environ 30%

5. Réponse du cache dans Redis ou Fichier

Parfois, il n'est pas nécessaire que la page soit appelée plusieurs fois à partir d'une base de données. La simple mise en cache de la page réduit considérablement la charge. C'est exactement la même idée que Plugin de cache de réponse Laravel. Les instructions d'installation sont assez bonnes. Dans mon cas, les performances ont considérablement augmenté.

Résultat : augmentation de la vitesse d'environ 200 ms dans mon cas

6. Optimiser InnoDB innodb_buffer_pool_size

Je ne sais pas pourquoi, mais pour une raison quelconque, InnoDB a un innodb_buffer_pool_size vraiment petit lors du déploiement de votre serveur Laravel Forge initial. Dans mon cas par défaut, le innodb_buffer_pool_size était de 8 Mo, alors que certains blogs estiment que vous pouvez réserver jusqu'à 80% de votre RAM pour innodb_buffer_pool_size. Modifiez donc le fichier my.conf :

sudo nano /etc/mysql/my.cnf

Et ajoutez par exemple :

innodb_buffer_pool_size = 1 Go

Résultat : des requêtes plusieurs fois plus rapides

7. Réduisez la charge en ajoutant un swap

Mon serveur avait régulièrement des problèmes de mémoire pleine et de charges élevées sur Redis. Cela a été résolu en ajoutant un peu de swap à Ubuntu. Comme décrit par DigitalOcean :

L'un des moyens les plus simples d'augmenter la réactivité de votre serveur et de vous protéger contre les erreurs de mémoire insuffisante dans vos applications consiste à ajouter de l'espace de swap. Le swap est une zone sur un disque dur qui a été désignée comme un endroit où le système d'exploitation peut stocker temporairement les données qu'il ne peut plus conserver dans la RAM.

En savoir plus sur l'ajout d'échange sur le Site Web de DigitalOcean.

Résultat : une réduction de charge lors de la saisie de la commande 'top'

8. Utilisation du chargement rapide au lieu du chargement différé

Lorsque vous utilisez des modèles Laravel Eloquent avec des relations, il est tentant d'utiliser le « chargement différé ». C'est une façon de mettre des modèles relationnels dans une boucle. Par exemple :

commentaires->nom; }

De cette façon, pour chaque blog, les commentaires seront chargés dans des requêtes séparées. Lors de l'utilisation du chargement rapide, les commentaires seront chargés dans UNE requête IN :

obtenir(); foreach ($blogs comme $blog) { echo $blog->commentaires->nom; }

En savoir plus sur Eager Loading sur Documentation de Laravel.

Comment trouver les requêtes qui peuvent nécessiter une optimisation ?

Vous ne savez pas comment trouver les requêtes qui pourraient nécessiter une optimisation ? Par exemple, qui pourraient nécessiter un chargement rapide au lieu d'un chargement paresseux ? Le moyen le plus simple est d'installer et d'activer Barre de débogage de Laravel sur votre serveur de développement. Avec cette barre d'outils, vous pouvez visualiser les requêtes par page. Si vous voyez beaucoup de requêtes qui auraient pu être simplifiées avec une simple jointure ou une requête interne, vous savez que c'est à vous d'optimiser ce script avec un chargement rapide.

Résultat : Chaque requête est enregistrée, quelques millisecondes par requête

Cette liste est encore en cours de développement, même si les conseils ci-dessus m'ont permis d'améliorer ma vitesse de PLUS D'UNE SECONDE. Si vous avez des conseils, faites-le moi savoir dans les commentaires !

Partagez également vos améliorations de vitesse 🙂

Réflexions de 5 sur « Laravel Speed and Performance Optimization 101 – The Guideline »

  1. Merci, c'est très instructif et utile.

    J'ai trouvé une erreur de frappe intéressante ici :
    R7. éduquer ….
    Je suppose que ça devrait être le cas
    7. Réduisez ….

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

fr_FRFrançais
Défiler vers le haut