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

58

Я использую композитор (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
    Что вы можете сделать - это указать нужный тег (вместо 2.1. * Используйте 2.1.1 fe)
  • 0
    В начале декабря 2014 года была обнаружена оптимизация, которая перестала пытаться собирать мусор во время запуска Composer. Из-за некоторых очень специфических вещей, которые делались в Composer, это заняло много времени, но в конечном итоге сделало очень мало. После патча многие сообщают, что Composer займет больше памяти, но запустит пополам или даже меньше времени.
Показать ещё 1 комментарий
Теги:
dependencies
composer-php

4 ответа

67
Лучший ответ

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

php composer.phar install --prefer-dist
  • 0
    Это значительно улучшает время загрузки моего очень простого проекта, который имеет много переходных зависимостей (используя phpunit)
  • 0
    он также хранит копию sit в ~ / .composer, так что другие проекты, или обновления и т. д. пойдут туда первыми.
Показать ещё 1 комментарий
19

Поскольку вы приняли ответ, похоже, что это решило вашу проблему. На всякий случай кто-то еще сталкивается с этим вопросом (например, когда я искал), в моем случае очень медленная установка 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 была выполнена в считанные секунды.

  • 0
    Спасибо, сэр, это решено!
  • 0
    +1 независимо от того, что обновление PHP не является опцией, потому что принятый ответ мне тоже не помог.
Показать ещё 3 комментария
14

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

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

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

Показать ещё 2 комментария
8

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

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

или

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

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

  • 2
    Это отлично сработало для меня. Лично бы пометил это как лучший ответ.
  • 1
    Отлично сработало для меня
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню