Maison  >  Article  >  interface Web  >  Méthodes de réglage des performances du framework Laravel

Méthodes de réglage des performances du framework Laravel

一个新手
一个新手original
2017-10-25 13:56:152060parcourir

Ceci est un résumé après. Après avoir traversé de nombreux pièges dans le processus de réglage, nous avons finalement perfectionné et mis en œuvre un plan préliminaire de tests de performances et résumé certaines compétences pratiques dans le processus de développement de Laravel à travers des données de test réelles.

Origine de 0x00

Récemment, un collègue a signalé que la réponse de l'application écrite en Laravel est un peu lente et que plus de 20 concurrences épuisent le CPU... Afin de résoudre le problème de la lenteur, certaines interfaces sont même utilisées nodejs Venez écrire.

Et ma première réaction a été : comment un framework populaire peut-il être si mauvais ? Il doit y avoir un problème avec l'utilisation. Afin de le savoir, j'ai commencé ce parcours de réglage des performances des applications Laravel.

Conseils de réglage 0x01

Les techniques d'optimisation utilisées dans ce plan de test de performances sont principalement basées sur le framework Laravel lui-même et les outils qu'il fournit.

  1. Désactiver le débogage des applications app.debug=false

  2. Informations de configuration du cachephp artisan config:cache

  3. Cache Informations de routagephp artisan router:cache

  4. Optimisation du chargement de la carte de classephp artisan optimize

  5. Optimisation du chargement automatiquecomposer dumpautoload

  6. Chargez uniquement le middleware nécessaire si nécessaire

  7. Utilisez un compilateur juste à temps (JIT), tel que : HHVM, OPcache

  8. Utiliser PHP 7.x

En plus des techniques d'optimisation ci-dessus, il existe de nombreuses pratiques de codage qui peuvent améliorer les performances des applications Laravel, qui ne seront pas expliquées dans cet article pour le moment . (Vous pouvez également suivre mes articles de suivi)

1. Fermez le débogage de l'application

Ouvrez le fichier .env dans le répertoire racine de l'application et définissez le débogage sur false.

APP_DEBUG=false

2. Cacher les informations de configuration

php artisan config:cache

L'exécution de la commande ci-dessus peut fusionner toutes les informations de configuration du dossier de configuration en un seul bootstrap/cache/config.php fichier, réduisant ainsi le nombre de fichiers à être chargé pendant l'exécution.

php artisan config:clear

Exécutez la commande ci-dessus pour vider le cache des informations de configuration, c'est-à-dire supprimer le bootstrap/cache/config.php fichier

3. Exécutez la commande ci-dessus pour générer le fichier

. La mise en cache des routes peut améliorer efficacement l'efficacité de l'enregistrement du routeur, et l'effet est plus évident dans les grandes applications.
php artisan route:cache

bootstrap/cache/routes.phpL'exécution de la commande ci-dessus effacera le cache de routage, ce qui signifie supprimer le fichier

.
php artisan route:clear

4. Optimisation du chargement du mappage de classes bootstrap/cache/routes.php

L'exécution de la commande ci-dessus peut fusionner les classes couramment chargées en un seul fichier, améliorant ainsi l'efficacité opérationnelle en réduisant le chargement des fichiers. Cette commande générera deux fichiers

et
php artisan optimize --force
.

bootstrap/cache/compiled.phpLes classes à fusionner peuvent être ajoutées en modifiant le fichier bootstrap/cache/services.json.

Dans un environnement de production, il n'est pas nécessaire de spécifier config/compile.php les fichiers de paramètres et ils peuvent être générés automatiquement.

--forceL'exécution de la commande ci-dessus effacera l'optimisation du chargement de la carte de classe, c'est-à-dire supprimera les fichiers

et
php artisan clear-compiled
.

bootstrap/cache/compiled.php5. Optimisation du chargement automatique bootstrap/cache/services.json

Les applications Laravel sont construites à l'aide de composer. Cette commande convertira PSR-0 et PSR-4 en une table de mappage de classes pour améliorer la vitesse de chargement des classes.

composer dumpautoload -o

Remarque : Cette opération a déjà été effectuée dans la commande

.

php artisan optimize --force6. Chargez uniquement le middleware nécessaire selon vos besoins

L'application Laravel intègre et active de nombreux middlewares. Chaque requête Laravel charge le middleware associé et génère diverses données. Commenter les middlewares inutiles (tels que la prise en charge de session) dans

peut grandement améliorer les performances.

7. Utilisez des compilateurs juste à temps app/Http/Kernel.php

HHVM et OPcache peuvent facilement améliorer les performances de votre application de 50 % ou plus sans apporter aucune modification.

8. Utilisation de PHP 7.x

On peut seulement dire que PHP 7.x a considérablement amélioré les performances par rapport aux versions précédentes.

Eh bien, limité à votre environnement d'entreprise réel, cela pourrait ne pas changer avant longtemps, donc je n'en ai pas parlé.

Plan de test 0x02

Nous utilisons la simple commande Apache ab pour tester uniquement le fichier d'entrée de l'application, et enregistrer et analyser les données.

Testez uniquement le fichier d'entrée de l'application index.php, et accédez à « / » ou « /index.php » pour revenir à la page d'accueil du cadre. Des tests de performances plus complets nécessitent de tester davantage d'interfaces de l'application.
  1. Utilisez la commande Apache ab.
  2. . Cette commande signifie lancer 10 requêtes vers l’URL en même temps et durer 10 secondes. Les paramètres spécifiques de la commande doivent être sélectionnés en fonction des performances du serveur à tester.
  3. ab -t 10 -c 10 {url}

    Afin d'éviter les erreurs de données causées par les fluctuations de la machine, chaque condition de test exécutera la commande ab plusieurs fois et enregistrera les résultats de l'exécution de la commande, en se concentrant sur le nombre de requêtes traitées par seconde et le temps de réponse à la demande, analyser et éliminer les valeurs aberrantes.
  4. Chaque fois que les conditions de test sont ajustées, vous devez accéder à la page d'accueil du navigateur pour vous assurer qu'il n'y a pas d'erreurs d'accès dues à la modification des conditions de test. Si des erreurs d'accès à la page se produisent, les résultats du test seront incorrects.

Description de l'environnement du serveur

Toutes les données de test séparées de l'environnement spécifique n'ont aucun sens et ne peuvent être comparées que dans des conditions similaires.

  1. Cet environnement fonctionne sur un Mac doté de 8 Go de mémoire, d'un processeur de 2,8 GHz et d'un disque dur SSD.

  2. Le serveur de test est construit à l'aide de Homestead. La machine virtuelle est configurée avec un processeur monocœur et une mémoire 2G.

  3. La version PHP du serveur est 7.1. Si elle n'est pas spécifiée, OPcache est activé.

  4. L'application Laravel testée a été écrite en version 5.2. 85 itinéraires sont définis en appHttproutes.php.

  5. Pendant le processus de test, à l'exception de la machine virtuelle, du terminal et de la fenêtre de navigateur fixe, aucun programme n'a été détecté qui pourrait affecter le fonctionnement de la machine.

Vous pouvez vous référer aux données ci-dessus lorsque vous effectuez vos propres tests.

0x03 Processus de test et données

1. Aucune optimisation n'a été effectuée

Opération 1.1

  • Effectuer les éléments de contrôle correspondants en fonction à l'opération suivante.

  • Exécuter ab -t 10 -c 10 http://myurl.com/index.php

Éléments de vérification de base

  • . le fichier env APP_DEBUG=true

  • n'existe pasbootstrap/cache/config.php

  • n'existe pasbootstrap/cache/routes.php

  • N'existe pasbootstrap/cache/compiled.php et bootstrap/cache/services.json

  • app/Http/Kernel.php permettent à la plupart des middlewares

  • du navigateur d'accéder à Laravel. La page d'accueil de l'application garantit un accès normal

1.2 Enregistrement des données

Méthodes de réglage des performances du framework Laravel

2. Fermer le débogage de l'application

Opération 2.1

  • Modifier APP_DEBUG=false dans le fichier .env en fonction de l'étape 1.

  • Visitez la page d'accueil de l'application Laravel avec votre navigateur pour garantir un accès normal.

  • Exécutez ab -t 10 -c 10 http://myurl.com/index.php.

2.2 Enregistrement de données

Méthodes de réglage des performances du framework Laravel

2.3 Résultats de la comparaison

Comparaison avec les résultats de l'étape 1 Découverte : après avoir désactivé le débogage de l'application, le nombre de requêtes traitées par seconde est passé de 26-34 à 33-35, et le temps de réponse des requêtes est passé de plus de 300 ms à environ 290 ms. L'effet n'est pas évident, mais. il y a effectivement une certaine amélioration.

Remarque : Cette partie est étroitement liée à l'utilisation des journaux dans l'application.

3. Activer les informations de configuration du cache

3.1 Opération

  • Sur la base de l'étape 2, exécutez

    et confirmez la générationphp artisan config:cache. bootstrap/cache/config.php

  • Visitez la page d'accueil de l'application Laravel avec votre navigateur pour garantir un accès normal.

  • Exécutez

    . ab -t 10 -c 10 http://myurl.com/index.php

3.2 Enregistrement de données

Méthodes de réglage des performances du framework Laravel

3.3 Résultats de la comparaison

Comparaison avec les résultats de l'étape 2 Découverte : après avoir activé le cache des informations de configuration, le nombre de requêtes traitées par seconde est passé de 33-35 à 36-38 et le temps de réponse des requêtes est passé d'environ 290 ms à environ 260 ms.

L'effet n'est pas évident, mais. il y a effectivement une certaine amélioration.

4. Activer les informations de routage du cache

4.1 Opération

  • Sur la base de l'étape 3, exécutez

    et confirmez la générationphp artisan route:cache. bootstrap/cache/routes.php

  • Visitez la page d'accueil de l'application Laravel avec votre navigateur pour garantir un accès normal.

  • Exécutez

    . ab -t 10 -c 10 http://myurl.com/index.php

4.2 Enregistrement de données

Méthodes de réglage des performances du framework Laravel

4.3 Résultats de la comparaison

Comparer avec les résultats de l'étape 3 Résultats : Après avoir activé le cache des informations de routage, le nombre de requêtes traitées par seconde est passé de 36-38 à environ 60, et le temps de réponse des requêtes est passé de 260 ms à environ 160 ms. L'effet était significatif du point de vue de. TPS, il a augmenté de 70%.

5. Supprimer le middleware inutile

Opération 5.1

    Sur la base de l'étape 4, commentez le code du middleware inutile.
  • Visitez la page d'accueil de l'application Laravel avec votre navigateur pour garantir un accès normal.
  • Exécutez
  • .

Méthodes de réglage des performances du framework Laravel

Remarque : j'ai commenté tous les middlewares dans ce test. Dans les situations réelles, vous devriez essayer de conserver uniquement les middlewares nécessaires.

5.2 Enregistrement de données

Méthodes de réglage des performances du framework Laravel

5.3 Résultats de la comparaison

Comparer avec les résultats de l'étape 4 et find: Supprimer Après la suppression des middlewares inutiles, le nombre de requêtes traitées par seconde est passé d'environ 60 à environ 90 et le temps de réponse des requêtes est passé de 160 ms à environ 110 ms L'effet est très évident du point de vue de TPS. il a augmenté de 50 %.

6. Activer l'optimisation du chargement de la carte de classe

6.1 Opération

  • Sur la base de l'étape 5, exécutez php artisan optimize --force et confirmez la générationbootstrap/cache/compiled.php et bootstrap/cache/services.json.

  • Visitez la page d'accueil de l'application Laravel avec votre navigateur pour garantir un accès normal.

  • Exécutez ab -t 10 -c 10 http://myurl.com/index.php.

6.2 Enregistrement de données

Méthodes de réglage des performances du framework Laravel

6.3 Résultats de la comparaison

Comparaison avec les résultats de étape 5 Découverte : Après l'optimisation du chargement du mappage de classes, le nombre de requêtes traitées par seconde est passé de 90 à 110 et le temps de réponse des requêtes est passé de 110 ms à moins de 100 ms L'effet est assez évident.

7. Fermez OPcache

7.1 Opération

  • Sur la base de l'étape 6, fermez OPcache de PHP et redémarrez le serveur. Confirmez que OPcache est fermé via Zend OPcache de phpinfo().

  • Visitez la page d'accueil de l'application Laravel avec votre navigateur pour garantir un accès normal.

  • Exécutez ab -t 10 -c 10 http://myurl.com/index.php.

7.2 Enregistrement de données

Méthodes de réglage des performances du framework Laravel

7.3 Résultats de la comparaison

Comparer avec les résultats de étape 6 Découverte : après avoir désactivé OPcache, le nombre de requêtes traitées par seconde est passé de 110 à 15 et le temps de réponse aux requêtes est passé de moins de 100 ms à plus de 650 ms. La différence de données est plusieurs fois plus grande lorsque OPcache est activé ou désactivé.

Après cela, j'ai rouvert l'OPcache de PHP et les données ont été restaurées au niveau de l'étape 6.

0x04 Pièges

1. [LogicException] Impossible de préparer la route [/] pour la sérialisation.

Exécution de la commande php artisan route:cache Signaler cette erreur. .

Cause : La fermeture est utilisée lors du traitement de "/" dans le fichier de routage. Pour exécuter cette commande, l'implémentation du routage ne doit pas utiliser de fermetures.

Plan de modification : Mettez l'implémentation spécifique du routage dans le contrôleur.

2. [Exception] La sérialisation de 'Closure' n'est pas autorisée

Cette erreur est signalée lors de l'exécution de la commande php artisan route:cache.

Cause : Des itinéraires en double sont définis dans le fichier de routage.

Plan de modification : recherchez les itinéraires en double dans le fichier de routage et modifiez-les. Sachez notamment que les méthodes resource sont susceptibles d'entraîner une duplication de leurs méthodes.

3. [RuntimeException] Nom de fichier non valide fourni.

Cette erreur est signalée lors de l'exécution de php artisan optimize --force naming.

Cause : Le fichier correspondant n'a pas été trouvé lors du chargement de la classe à compiler. Le chemin du fichier à compiler est défini dans vendor/laravel/framework/src/Illuminate/Foundation/Console/Optimize/config.php de la version 5.2, mais je ne sais pas pourquoi /vendor/laravel/framework/src/Illuminate/Database/Eloquent/ActiveRecords.php n'a pas été trouvé, donc cette erreur a été signalée.

Plan de modification : commentez temporairement la ligne ../ActiveRecords.php dans le config.php ci-dessus.

4. InvalidArgumentException dans FileViewFinder.php ligne 137 : Afficher [bienvenue] introuvable.

Après l'exécution de php artisan config:cache, cette erreur est signalée lors de l'accès à la page d'accueil de l'application Laravel sur le navigateur.

Raison : Le serveur d'applications Laravel est construit sur une machine virtuelle utilisant Homestead. J'ai exécuté cette commande en dehors de la machine virtuelle, ce qui a fait que le chemin dans le config.php généré était le chemin local, et non le chemin sur la machine virtuelle. Le fichier de vue est donc introuvable.

Plan de modification : connectez-vous en SSH à la machine virtuelle et exécutez cette commande.

0x05 Compétences pratiques

Les pièges ont été surmontés et les tests ont été effectués. Voici un bref résumé des compétences pratiques basées sur cette expérience.

1. Conseils efficaces pour optimiser les applications Laravel

  1. Désactiver le débogage de l'application app.debug=false

  2. Informations de configuration du cachephp artisan config:cache

  3. Informations de routage du cachephp artisan router:cache

  4. Optimisation du chargement des cartes de classes php artisan optimize (inclut l'optimisation du chargement automatique composer dumpautoload)

  5. Chargez uniquement le middleware nécessaire si nécessaire

  6. Utilisez des compilateurs juste à temps (JIT), tels que : HHVM, OPcache

2. Choses à noter lors de l'écriture de code

  1. L'implémentation spécifique du routage est placée dans le contrôleur.

  2. Ne définissez pas d'itinéraires répétés, notamment la méthode

    . resouce

  3. Effacez le rôle de chaque middleware et supprimez les références de middleware inutiles.

0x06 Étape suivante

Les compétences de réglage et les considérations de codage ci-dessus concernent principalement le framework lui-même. Il existe de nombreuses compétences d'optimisation spécifiques dans le codage de logique métier réelle. discuté.

L'optimisation suivante se concentrera sur des pratiques de codage spécifiques :

  1. Utilisez Memcached pour stocker la configuration de session/session.php

  2. Utilisez un pilote de cache professionnel

  3. Optimisation des requêtes de base de données

  4. Écrire la logique de mise en cache pour l'ensemble de données

  5. Ressources front-end fusionnées avec Elixir

0x07 Écrit à la fin

J'ai vu de nombreux articles et débats sur la comparaison des performances des frameworks sur Internet, et j'ai j'ai également vu de nombreux messages simples de données. Cela ne suffit pas pour avoir un aperçu de la situation réelle, c'est pourquoi nous avons mené cette pratique et réalisé des enregistrements détaillés au cours du processus. Il fournit aux lecteurs des références, des comparaisons et une réflexion au cours de leur pratique. Les lecteurs qui ont des questions sur cette pratique sont également invités à soumettre leurs questions et commentaires.


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!

Déclaration:
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