web-dev-qa-db-fra.com

Mise à jour lente des dépendances composer, malgré l'indicateur --prefer-dist

Pourquoi cela prend-il jusqu'à deux minutes pour que mes dépendances composer) se mettent à jour, même en l'absence de changement?

Un suggestion populaire est d'ajouter le --prefer-dist drapeau que j'ai ajouté à ma commande:

php composer.phar update --prefer-dist

Mais cela ne fait aucune différence. Ci-dessous, mon fichier composer.json - quelque chose d’évident me manque-t-il?

{
    "name": "my-namespace/symfony",
    "type": "project",
    "description": "",
    "require": {
        "php": ">=5.3.3",
        "symfony/symfony": "2.3.*",
        "doctrine/orm": ">=2.2.3,<2.4-dev",
        "doctrine/doctrine-bundle": "1.2.*",
        "twig/extensions": "1.0.*",
        "symfony/assetic-bundle": "2.3.*",
        "symfony/monolog-bundle": "2.3.*",
        "sensio/framework-extra-bundle": "2.3.*",
        "sensio/generator-bundle": "2.3.*",
        "sensio/distribution-bundle": "2.2.*",
        "my-namespace/my-bundle": "1.0.*"
    },
   "repositories": [
        {
            "type": "vcs",
            "url": "http://username:[email protected]/my-bundle.git"
        }
    ],    
    "scripts": {
        "post-install-cmd": [
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
        ],
        "post-update-cmd": [
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
        ]
    },
    "config": {
        "bin-dir": "bin"
    },
    "minimum-stability": "dev",
    "extra": {
        "symfony-app-dir": "app",
        "symfony-web-dir": "web",
        "branch-alias": {
            "dev-master": "2.3-dev"
        }
    }
}
60
Jonathan

Ce problème est souvent lié au chargement de xdebug dans votre environnement CLI. (Peu importe si xdebug est activé ou non.)

Vous pouvez vérifier si xdebug est activé en utilisant l’une des commandes suivantes.

// Unix
php -m | grep xdebug
// Windows
php -m | findstr xdebug

Des informations supplémentaires sur les opérations qui prennent si longtemps peuvent être obtenues en permettant un maximum de verbosité et d’information de profilage. (Remplacez installer par pdate si vous mettez à jour les packages.)

composer install --prefer-dist -vvv --profile
92
Nicolai Fröhlich

Facteurs pouvant ralentir Composer:

  • Comme indiqué, xdebug peut affecter les performances de Composer. Fonctionnement composer diagnose vous avertira également à ce sujet.

  • Lancer update au lieu de install. Les gens exécutent trop souvent update constamment. Cela fait Composer parcourir l'intégralité du processus de résolution des dépendances, que quelque chose ait changé ou non. Lorsque vous exécutez install, Composer prend les exigences directement à partir de votre fichier .lock, en ignorant le processus de résolution des dépendances. Vous ne devez exécuter update qu'au cours du cycle de développement de votre application. Même dans ce cas, vous ne devez généralement pas l'exécuter quotidiennement.

  • Si vous avez une dépendance spécifique que vous mettez à jour fréquemment vous-même, vous pouvez essayer de simplifier le processus en exécutant composer update vendor/package --with-dependencies au lieu.

  • Réglage minimum-stability à dev. Cela élargit considérablement le nombre de possibilités que le résolveur de dépendances doit prendre en compte. Vous ne devriez presque jamais baisser le minimum-stability to dev à moins que vous n’ayez absolument pas d’autre choix. Recherchez des alternatives, telles que l’utilisation temporaire d’un inline @dev drapeau.

20
alcohol

On dirait que le problème a été résolu, mais cela pourrait aider quelqu'un.

Chaque fois que j'ai exécuté composer installer ou mettre à jour, cela a pris plus de 10 secondes pour récupérer le fichier https://packagist.org/packages.json . Finalement, j'ai trouvé que le problème était lié à IPv6, car l'extraction de fichiers depuis des sites IPv4 prenait moins d'une seconde.
Le problème est que mon fournisseur de services Internet ne prend pas en charge IPv6, mais que je l'avais activé dans mes propriétés Ethernet. Après avoir décoché Internet Protocol Version 6 (TCP/IPv6) dans mes paramètres réseau, la vitesse d'installation/de mise à jour s'est considérablement améliorée (passage de plus de 200 secondes à environ 10)

4
Rai

Je rencontrais ce problème lors de l'exécution de Symfony2 sur un VM dont la mémoire était insuffisante. J'ai augmenté la mémoire de la machine et celle-ci s'est considérablement améliorée. Vous pouvez vérifier la mémoire de votre système et voir si elle peut être mise à niveau.

3
John Sampson

Vous utilisez un référentiel privé. Cela ne permettra pas de télécharger la version compressée de la version que vous incluez, mais vous devez cloner le référentiel. En outre, il se peut que le référentiel entier doive être analysé pour rechercher la version requise.

Vous devriez vérifier si l'utilisation de Satis est une option. De cette façon, vous pourrez préparer des ZIP de votre propre logiciel et le télécharger exactement comme les éléments hébergés sur Github (qui possède une API pour cela utilisée par Composer pour autoriser le téléchargement de ZIP même s'ils ne le sont pas.) explicitement préparé).

2
Sven

J'ai eu le même problème avec composer update, J’ai mis à jour composer lui-même avec la dernière version en utilisant composer selfupdate et maintenant sa vitesse est acceptable.

1
ako

En effet, xdebug va certainement ralentir les choses. La désinstallation de xdebug n’est cependant pas idéale. Une bonne option consiste à utiliser HHVM et à le mettre composer devoir.

L'installation de HHVM est assez simple et HHVM lui-même est beaucoup plus rapide que PHP5. C'est une double victoire - YMMV, mais j'ai obtenu une augmentation de vitesse presque 5 fois (sur le dyno du globe oculaire) dans l'utilisation composer) même si xdebug n'était pas dans l'image .

Si vous êtes sous OS X, ce lien peut vous aider (article de blog que j'ai écrit à ce sujet):

http://circlical.com/blog/2015/11/11/slow-composer-on-os-x

1
Saeven

Vérifiez si Zip et unzip sont installés. S'ils sont manquants, Composer clonera le référentiel au lieu de télécharger une version compressée.

0
Stian S

J'ai ajouté precedence :: ffff: 0: 0/96 100 dans le fichier /etc/gai.conf et essayez votre mise à jour. .

0
Lasith Niroshan