Warum ist Composer so langsam, wenn ich nur ein Projekt mit null Abhängigkeiten initiiere? Hier sind die Befehle, die ich ausführen:
composer init
composer install
Warten Sie 3 Minuten (keine Übertreibung).
Der Komponist muss nur einen Autoloader einlesen und /vendor
erstellen. Warum dauert es so lange? Warum passiert dieser Schritt nicht bei composer init
?
Gibt es eine Konfigurationsoption, die ich verwenden kann, um einen zwischengespeicherten Autloader und Anbieter auf init
einzuziehen?
Deaktivieren Sie auch xdebug. Xdebug kann dazu führen, dass Composer Minuten beansprucht, selbst wenn Sie einen einfachen Befehl wie composer --version
ausführen.
Weil Composer von file_get_contents()
implementiert wird. Das hat keine TCP Optimierungen, kein Keep-Alive, kein Multiplexing ...
Ich habe ein Composer-Plugin erstellt, um Pakete parallel herunterzuladen.
https://packagist.org/packages/hirak/prestissimo
composer install
10 Mal schneller.
composer global require "squizlabs/php_codesniffer=*" -vvv
.composer config --global repo.packagist composer https://packagist.org
Hier gilt das gleiche. Weitere Informationen erhalten Sie mit "composer install --profile -vvv". In meinem Fall dauert das Herunterladen einiger Json-Dateien sehr lange. Sie werden auf meinem Server zwischengespeichert, aber bei jedem Update-/Installationsaufruf von Composer heruntergeladen.
... 30 Minuten später ...
Sieht aus wie ein Performance-Problem @ packagist.org. Die Composer-Installation läuft jetzt innerhalb von 2 Sekunden! Und heruntergeladene Json-Dateien werden ordnungsgemäß zwischengespeichert.
Auf Ubuntu Xenial 16.04 VPS müssen Sie folgende Schritte ausführen:
Sudo sh -c "echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf"
composer global require hirak/prestissimo
Ich bin auf dieses Problem gestoßen und es hat mich für eine Kurve geworfen, da ich XDebug nirgendwo auf meinem Rechner installiert habe. Es stellt sich heraus, dass es sich um IPv6-Adressierungsmodusfehler handelt. Also zum testen bin ich gerannt
curl --ipv4 'https://packagist.org/packages.json'
curl --ipv6 'https://packagist.org/packages.json'
IPv4 ist durchgegangen, aber IPv6 schlägt fehl. Am Ende sollten Sie herausfinden, warum Ihr Netzwerk-Stack dies nicht unterstützt. In meinem Fall habe ich mich jedoch dazu entschieden, IPv4-Verkehr zu bevorzugen, bis ich das Problem lösen kann. Auf CentOS habe ich die Datei /etc/gai.conf erstellt/geändert und Folgendes eingegeben:
label ::1/128 0
label ::/0 1
label 2002::/16 2
label ::/96 3
label ::ffff:0:0/96 4
precedence ::1/128 50
precedence ::/0 40
precedence 2002::/16 30
precedence ::/96 20
precedence ::ffff:0:0/96 100
Unter Ubuntu können Sie diese Datei auch bearbeiten und die Zeile kommentieren
precedence ::ffff:0:0/96 100
Wenn eine der obigen Antworten nicht funktioniert, prüfen Sie, ob Ihre Firewall TCP_OUT an Port 9418 zulässt. Meine Firewall-Sicherheit war zu hoch. Dies hat dazu geführt, dass der Komponist so lange gebraucht hat, dass ich nie eine Auszeit bekam oder einen Hinweis darauf, dass der Port blockiert wurde. Ich hoffe es hilft!