wake-up-neo.com

Warum ist PHP Composer so langsam?

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?

54
AgmLauncher

Deaktivieren Sie auch xdebug. Xdebug kann dazu führen, dass Composer Minuten beansprucht, selbst wenn Sie einen einfachen Befehl wie composer --version ausführen.

23
adjco

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.

242
hiraku
  1. Stellen Sie sicher, dass Sie über die neueste Version von Composer verfügen.
  2. Installieren Sie den ausführlichen Modus, indem Sie -vvv hinzufügen, beispielsweise composer global require "squizlabs/php_codesniffer=*" -vvv.
  3. Wenn Sie herausfinden können, wo der Komponist langsam ist, steckte ich zum Beispiel beim Herunterladen von Paketen für 5 Minuten fest. Es dauerte> 5 Minuten, um eine 20-kb-Datei von einer 50-MBit/s-Verbindung herunterzuladen. Dies lag daran, dass die Pakete von packagist über http und nicht über https heruntergeladen wurden. Durch diese Änderungen an der Konfiguration wurde mein Problem behoben: composer config --global repo.packagist composer https://packagist.org
35
sgr12

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.

8
ppan

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
1
Liam Mitchell

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

Quelle auf Rackspace Community Hub

0

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!

0
gidomanders