Pourquoi PHP composer est-il si lent?
Pourquoi composer est-il si lent alors que tout ce que je fais est d'initialiser un projet avec zéro dépendance? Voici les commandes que je lance:
composer init
composer install
Attendez 3 minutes (pas une exagération).
Tout ce que composer A à faire est de tirer un chargeur automatique et de créer /vendor
, alors pourquoi cela prend-il si longtemps? D'ailleurs, pourquoi cette étape ne se produit - elle pas sur composer init
?
Existe-t-il une option de configuration que je peux utiliser pour extraire un chargeur automatique et un fournisseur mis en cache sur init
?
5 réponses
Aussi, désactivez xdebug. Xdebug peut faire en sorte que Composer prenne quelques minutes même lors de l'exécution d'une commande aussi simple que composer --version
.
Parce que composer implémente par file_get_contents()
. Cela n'a pas D'optimisations TCP, pas de Keep-Alive, pas de multiplexage...
, j'ai créé un compositeur plugin pour télécharger les paquets en parallèle.
https://packagist.org/packages/hirak/prestissimo
$ composer global require hirak/prestissimo
S'il vous plaît essayer. Dans mon environnement, composer install
devient 10 fois plus rapide.
- assurez-vous d'avoir la dernière version de Compositeur.
- Installer en mode verbeux en ajoutant -vvv, par exemple
composer global require "squizlabs/php_codesniffer=*" -vvv
- Si vous êtes en mesure de savoir où composer est confronté à la lenteur, par exemple, le mien était bloqué pendant 5 minutes lors du téléchargement de paquets. Il a fallu >5 minutes pour télécharger un fichier de 20 Ko sur une connexion de 50 mbps. C'était parce qu'il téléchargeait les paquets de packagist en utilisant http et non https. Apporter ces modifications à la configuration a résolu mon problème:
composer config --global repo.packagist composer https://packagist.org
Pareil ici. Obtenez plus de détails avec "compositeur install --profil -vvv". Dans mon cas, il faut beaucoup de temps pour télécharger quelques fichiers json. Ils sont mis en cache sur mon serveur mais sont toujours téléchargés avec chaque appel composer update/install.
... 30 Minutes plus tard ...
Ressemble à un problème de performance @packagist.org. maintenant compositeur installer fonctionne dans les 2 secondes! Et les fichiers JSON téléchargés sont correctement mis en cache.
Si l'une des réponses ci-dessus ne fonctionne pas, vérifiez si votre pare-feu autorise TCP_OUT sur le port 9418. Ma sécurité de pare-feu était trop forte. Cela a fait que composer a pris si longtemps, je n'ai jamais eu de délai d'attente ou d'indication que le port était bloqué. Espérons que cela aide!