Почему обновление зависимостей в композиторе происходит так медленно?

Я использую композитор (http://getcomposer.org/) для управления установленными пакетами в Symfony2 (symfony v 2.1.3). Версия композитора de3188c.

У меня проблема с тем, что когда я добавляю новый набор в композитор .json и выполняю его, время показывать сообщения об обновлении зависимостей, а следующая загрузка их очень низкая.

У меня есть эти данные в composer.json(см. ниже), а время выполнения составляет приблизительно 20 МИНУТ!!! Подключение к Интернету достаточно быстро, я могу быстро загрузить большие файлы...

Есть ли какой-нибудь трюк, чтобы сделать его быстрее?

{
"name": "symfony/framework-standard-edition",
"description": "The \"Symfony Standard Edition\" distribution",
"autoload": {
    "psr-0": { "": "src/" }
},
"require": {
    "php": ">=5.3.3",
    "symfony/symfony": "2.1.*",
    "doctrine/orm": ">=2.2.3,<2.4-dev",
    "doctrine/doctrine-bundle": "1.0.*",
    "twig/extensions": "1.0.*",
    "symfony/assetic-bundle": "2.1.*",
    "symfony/swiftmailer-bundle": "2.1.*",
    "symfony/monolog-bundle": "2.1.*",
    "sensio/distribution-bundle": "2.1.*",
    "sensio/framework-extra-bundle": "2.1.*",
    "sensio/generator-bundle": "2.1.*",
    "jms/security-extra-bundle": "1.2.*",
    "jms/di-extra-bundle": "1.1.*",
    "doctrine/doctrine-fixtures-bundle": "dev-master",
    "webignition/doctrine-migrations-bundle": "dev-master"
},
"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"
    ]
},
"minimum-stability": "dev",
"extra": {
    "symfony-app-dir": "app",
    "symfony-web-dir": "web"
}

Ответ 1

Попробуйте указать версию для каждой зависимости в composer.json и используйте опцию --prefer-dist при вызове композитора. Он будет загружать ZIP файлы из репозиториев (если они доступны) вместо отдельных файлов.

php composer.phar install --prefer-dist

Ответ 2

Поскольку вы приняли ответ, похоже, что это решило вашу проблему. На всякий случай кто-то еще сталкивается с этим вопросом (например, когда я искал), в моем случае очень медленная установка Composer была связана с моей версией PHP (слово предупреждения, я полный и полный новичок Composer), хотя композитор прошел стандартные проверки и сказал, что все в порядке. Я запускаю Ubuntu 12.04 LTS и был слишком ленив, чтобы обновить с PHP 5.3.10 по умолчанию (ту же версию, в которой вы работаете) в Precise repo.

Установка Twig через Composer изначально заняла у меня около 30 минут. Я отказался от установки Доктрины после того, как потребовалось больше часа. Я обновил до 5.4.17 (используя этот PPA https://launchpad.net/~ondrej/+archive/php5), и установка Doctrine была выполнена в считанные секунды.

Ответ 3

Я обнаружил, что он также очень медленный, в десятки минут медленный.

Для меня я добавил -vvv и обнаружил, что он висит на вещи вроде Downloading https://packagist.org/p/provider-active$53cdf887c8d2925b3501f47d6980fb7bda2310716369bf7a84857c6e62bbab0f.json

Затем я пошел в браузер и попытался загрузить этот JSON файл и, конечно же, достаточно. Это был packagist.org, который стал причиной медленности.

Ответ 4

В моем случае вышеупомянутые предложения не повлияли. Что нужно было использовать для протокола HTTPS для packagist:

php composer.phar config --global repo.packagist composer https://packagist.org

или

composer config --global repo.packagist composer https://packagist.org

в зависимости от вашей настройки