La colonne tutorielle suivante de composer vous présentera le guide d'optimisation des performances de chargement automatique du compositeur. J'espère qu'il sera utile aux amis dans le besoin !
Le mécanisme de chargement automatique fourni par composer nous permet d'organiser très facilement le code et d'introduire de nouvelles bibliothèques de classes, mais il réduit également considérablement les performances du projet.
La principale raison pour laquelle le chargement automatique du compositeur est lent est due à la prise en charge de PSR-0 et PSR-4. Lorsque le chargeur obtient un nom de classe, il doit trouver l'emplacement du fichier de classe correspondant dans le système de fichiers, ce qui provoque beaucoup de problèmes de perte de performances, bien sûr, cela est toujours utile lorsque nous développons, afin que les nouveaux fichiers de classe que nous ajoutons puissent prendre effet immédiatement. Mais en mode production, nous souhaitons retrouver ces fichiers de classe et les charger le plus rapidement possible.
Par conséquent, composer propose plusieurs stratégies d'optimisation. Ces stratégies d'optimisation sont expliquées ci-dessous.
Optimisation de niveau 1 : générer un classmap
Comment exécuter :
Exécuter la commandecomposer dump-autoload -o
(-o est équivalent à --optimize)
Principe :
L'essence de cette commande est de convertir les règles PSR-4/PSR-0 en règles de classmap Parce que le classmap contient. la correspondance entre tous les noms de classe et les chemins de fichiers de classe, le chargeur n'a plus besoin de rechercher des fichiers dans le système de fichiers. Le chemin d'accès au fichier de classe peut être trouvé directement à partir du classmap.
Notes
Il est recommandé d'activer opcache, ce qui accélérera considérablement le chargement des classes.
php5.5 et les versions ultérieures sont livrées avec opcache par défaut.
Cette commande ne prend pas en compte la situation où la classe cible n'est pas trouvée dans le classmap. Lorsque le chargeur ne peut pas trouver la classe cible, il ira quand même au système de fichiers selon les règles de PSR-. Recherche 4/PSR-0
Optimisation de deuxième niveau (Niveau-2/A) : carte de classe faisant autorité (Authoritative)
Exécuter la commande :
Exécuter la commandecomposer dump-autoload -a
(-a est équivalent à --classmap-authoritative)
Principe
L'exécution implicite de cette commande exécute également le niveau 1 commande, c'est-à-dire que le classmap est également généré. La différence est que lorsque le chargeur ne peut pas trouver la classe cible dans le classmap, il ne recherchera pas dans le système de fichiers (c'est-à-dire qu'il croit implicitement que toutes les classes légales se trouvent dans le classmap). , et il n'y aura pas d'Autres classes, sauf appel illégal)
Notes
Si votre projet génère des classes au moment de l'exécution, ces nouvelles classes ne seront pas trouvées grâce à cette optimisation stratégie Classe générée.
Optimisation de deuxième niveau (niveau 2/B) : utiliser le cache APCu
Exécuter la commande :
Exécuter la commande composer dump-autoload --apcu
Principe :
L'utilisation de cette stratégie nécessite l'installation de l'extension apcu.
apcu peut être compris comme un morceau de mémoire et peut être partagé entre plusieurs processus.
Cette stratégie consiste à stocker le résultat trouvé dans le système de fichiers dans la mémoire partagée lorsque la classe cible n'est pas trouvée dans la carte de classe au niveau 1 lors de la prochaine recherche, elle peut être directement récupérée de la mémoire. . Revenez sans avoir à chercher à nouveau dans le système de fichiers.
Dans l'environnement de production, cette stratégie est généralement utilisée avec Level-1. Exécutez composer dump-autoload -o --apcu De cette façon, même si une nouvelle classe est générée dans l'environnement de production, uniquement. le système de fichiers est nécessaire. Il peut être mis en cache après une seule recherche, ce qui compense les lacunes du niveau 2/A.
Comment choisir une stratégie d'optimisation ?
Vous devez choisir une stratégie basée sur la situation réelle de votre projet. Si votre projet ne génère pas de fichiers de classe lors de son exécution et nécessite le chargement automatique du compositeur, utilisez le niveau 2/A. utiliser le niveau 1 et le niveau 2/B est un meilleur choix.
Quelques conseils
L'optimisation de niveau 2 est essentiellement un complément à l'optimisation de niveau 1, et le niveau 2/A est principalement un décision Lorsque la classe cible n'est pas trouvée dans le classmap, s'il faut continuer à la rechercher, Level-2/B fournit principalement un mécanisme de mise en cache. Lorsque la classe cible n'est pas trouvée dans le classmap, il mettra en cache le chemin du fichier trouvé dans le classmap. système de fichiers. , accélérant les recherches ultérieures.
Lorsque le niveau 2/A est exécuté, cela signifie que s'il ne peut pas être trouvé dans la carte de classe, il ne continuera pas la recherche. À ce moment, le niveau 2/B le fera. ne prend pas effet.
Quelle que soit la situation, il est recommandé d'activer opcache. Cela améliorera considérablement la vitesse de chargement des cours. J'ai mesuré visuellement l'amélioration des performances d'au moins 10 fois.
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!