Das Folgende ist eine Tutorial-Kolumne mit dem Composer-Befehl , um Ihnen die Optimierung des Composer-Autoloaders vorzustellen. Ich hoffe, dass es für Freunde in Not hilfreich sein wird!
Autoloader-Optimierung
Normalerweise läuft der Autoloader von Composer relativ schnell. Aufgrund der Autoloading-Regeln von PSR-4 und PSR-0 muss jedoch das Dateisystem überprüft werden, bevor eine Klasse endgültig analysiert wird. Dies führt dazu, dass die Geschwindigkeit des automatischen Ladens ziemlich langsam wird. In einer Entwicklungsumgebung ist dies jedoch eine sehr praktische Lademethode, da der Lader die Klasse beim Erstellen einer neuen Klasse sofort erkennt und verwendet, ohne dass Sie dazu aufgefordert werden müssen um die Autoloader-Konfiguration neu zu erstellen.
Die durch diese Art von Laderegel verursachten Probleme spiegeln sich tatsächlich in der Produktionsumgebung wider. In der Produktionsumgebung können Sie die Konfiguration vor jeder Bereitstellung sehr einfach neu erstellen, und neue Konfigurationen werden nicht zufällig zwischen den Bereitstellungsklassen angezeigt Damit Sie das Dateisystem nicht ständig überprüfen müssen, möchten Sie im Allgemeinen, dass der automatische Ladevorgang so schnell wie möglich abgeschlossen wird.
Aus den oben genannten Gründen bietet Composer einige Optimierungsstrategien für Autoloader.
Hinweis: Sie sollten keine der in diesem Artikel beschriebenen Optimierungsstrategien in einer Entwicklungsumgebung verwenden, da dies beim Hinzufügen oder Entfernen von Klassen zu verschiedenen Problemen führen kann. Tatsächlich wird der Leistungsgewinn durch die Anwendung dieser Einstellungen in einer Entwicklungsumgebung durch die dadurch verursachten Probleme bei weitem aufgewogen.
Optimierungsstufe 1: Klassenkartengenerierung
Wie wird es ausgeführt?
Es gibt mehrere Optionen, um diese Funktion zu aktivieren:
Setzen Sie „optimize-autoloader“: true in der Konfiguration von Composer.json
Verwenden Sie -o / - -optimize-autoloader ruft Installation oder Update auf
Verwenden Sie -o / --optimize, um dump-autoload aufzurufen
Was macht es?
Die Klassenkartengenerierung wandelt im Wesentlichen PSR-4/PSR-0-Regeln in Klassenkartenregeln um. Dies beschleunigt alles erheblich, da eine bekannte Klassenzuordnung den Pfad sofort zurückgibt und Composer garantieren kann, dass die Klasse vorhanden ist, sodass keine Dateisystemprüfungen erforderlich sind.
In PHP 5.6+ werden Classmaps auch im Opcache zwischengespeichert, was die Initialisierungszeit erheblich verkürzt. Wenn Sie sicherstellen, dass Opcache aktiviert ist, sollte die Klassenzuordnung sofort geladen werden und die Klassen werden schnell geladen.
Kompromisse
Bei diesem Ansatz gibt es keine wirklichen Kompromisse. Es sollte in der Produktion immer aktiviert sein.
Das einzige Problem besteht darin, dass das automatische Laden nicht verfolgt wird (d. h. wenn eine bestimmte Klasse nicht gefunden werden kann), sodass es immer noch möglich ist, dass diese Regeln, die auf PSR-4 zurückgreifen, Dateisystemprüfungen verursachen Langsamer . Um dieses Problem zu lösen, gibt es zwei sekundäre Optimierungsoptionen, die Sie aktivieren können, wenn Sie viele class_exists-Prüfungen für Klassen durchführen, die in Ihrem Projekt nicht vorhanden sind.
Optimierungsstufe 2/A: Autoritative Klassenzuordnung
Wie wird es aktiviert?
Es gibt mehrere Optionen, um diese Funktion zu aktivieren:
Setzen Sie „classmap-authoritative“: true im Konfigurationsschlüssel von Composer.json
Verwenden Sie -a / --classmap-authoritative Aufruf zum Installieren oder Aktualisieren
Verwenden Sie -a / --classmap-authoritative, um dump-autoload aufzurufen
Was bewirkt es?
Durch die Aktivierung dieser Option wird automatisch die Klassenkartenoptimierung der Stufe 1 aktiviert.
Diese Option ist einfach: Sie besagt, dass, wenn etwas im Klassendiagramm nicht gefunden wird, es nicht existiert und der Autoloader nicht versuchen sollte, das Dateisystem gemäß den PSR-4-Regeln zu betrachten.
Kompromisse
Diese Option sorgt dafür, dass der Autoloader immer schnell zurückkehrt. Andererseits bedeutet dies auch, dass das automatische Laden nicht zulässig ist, wenn die Klasse aus irgendeinem Grund zur Laufzeit generiert wird. Wenn dies bei Ihrem Projekt oder einer seiner Abhängigkeiten der Fall ist, können in der Produktion Probleme mit der Bezeichnung „Klasse nicht gefunden“ auftreten. Achten Sie darauf, es zu aktivieren.
Hinweis: Dies kann nicht in Verbindung mit der Level 2/B-Optimierung verwendet werden. Sie müssen sich für eines entscheiden, da sie dasselbe Problem auf unterschiedliche Weise lösen.
Optimierungsstufe 2/B: APCu-Cache
Wie aktiviere ich es?
Es gibt eine Option zum Aktivieren dieser Funktion:
Setzen Sie „apcu-autoloader“: true im Konfigurationsschlüssel von Composer.json
Verwenden Sie --apcu - Autoloader ruft Installation oder Update auf
Verwenden Sie --apcu, um dump-autoload aufzurufen
Was macht es?
Diese Option fügt den APCu-Cache als Fallback für die Klassenzuordnung hinzu. Klassenzuordnungen werden nicht automatisch generiert, daher müssen Sie bei Bedarf die Optimierung der Stufe 1 manuell aktivieren.
Unabhängig davon, ob die Klasse gefunden wird oder nicht, wird diese Tatsache immer in APCu zwischengespeichert, sodass sie bei der nächsten Anfrage schnell zurückgegeben werden kann.
Kompromisse
Diese Option erfordert APCu, was für Sie möglicherweise funktioniert oder auch nicht. Es verwendet auch APCu-Speicher zum automatischen Laden, ist jedoch sicher in der Verwendung und führt nicht dazu, dass Klassen nicht gefunden werden, wie die obige autorisierende Klassenzuordnungsoptimierung.
Hinweis: Dies kann nicht in Verbindung mit der Level 2/A-Optimierung verwendet werden. Sie müssen sich für eines entscheiden, da sie dasselbe Problem auf unterschiedliche Weise lösen.
Das obige ist der detaillierte Inhalt vonComposer-Autoloader-Optimierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!