Je 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 🙂
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 ….
Merci, je l'ai corrigé !
J'adore votre site !
L'information est claire, pertinente et utile.
Bons conseils ! J'écris également un article avec une brève description sur l'optimisation des performances de Laravel qui aide les développeurs à accélérer l'application Laravel
https://www.cloudways.com/blog/laravel-performance-optimization/
Vous pouvez également utiliser ce package pour mettre en cache les parties de votre page dans Redis, ce qui augmente considérablement la vitesse.
https://github.com/imanghafoori1/laravel-widgetize