Медленное обновление зависимостей композитора, несмотря на флаг -prefer-dist

Почему обновления зависимостей моего композитора занимают до двух минут, даже если не было никаких изменений?

Популярное предложение - добавить флаг --prefer-dist, который я --prefer-dist в свою команду:

php composer.phar update --prefer-dist

Но это не имеет значения. Ниже приведен мой файл composer.json - я что-то упускаю из виду?

{
    "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"
        }
    }
}

Ответ 1

Эта проблема часто связана с загрузкой xdebug в вашей среде CLI. (Неважно, включен xdebug или нет.)

Вы можете проверить, включен ли xdebug, с помощью одной из следующих команд.

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

Дополнительную информацию о том, какие операции занимают так много времени, можно получить, обеспечив максимальную детализацию и профилирование информации. (Замените install на update, если вы обновляете пакеты.)

composer install --prefer-dist -vvv --profile

Ответ 2

Факторы, которые могут замедлить композитор:

  • Как указано, xdebug может повлиять на производительность Composer. Запуск composer diagnose также предупредит вас об этом.

  • Запуск update вместо install. Люди слишком часто просто запускают update постоянно. Это заставляет Composer пройти весь процесс разрешения зависимостей, независимо от того, изменилось или нет. Когда вы запускаете install, Composer берет требования непосредственно из вашего .lock файла, пропуская процесс разрешения зависимостей. Вы должны запускать update только в течение жизненного цикла разработки вашего приложения. И даже тогда, это не то, что вы обычно должны выполнять ежедневно.

  • Если у вас есть определенная зависимость, которую вы часто обновляете самостоятельно, попробуйте упростить процесс, запустив composer update vendor/package --with-dependencies.

  • Установка minimum-stability в dev. Это значительно расширяет объем возможностей, которые должен учитывать распознаватель зависимостей. Вы почти никогда не должны опускать minimum-stability до dev, если у вас нет другого выбора. Посмотрите альтернативы, например, временно используя встроенный флаг @dev.

Ответ 3

Похоже, проблема решена, но это может помочь кому-то.

Всякий раз, когда я запускал установку или обновление композитора, потребовалось больше 10 секунд, чтобы извлечь файл https://packagist.org/packages.json. В конце концов я узнал, что проблема связана с IPv6, поскольку выборка файлов с сайтов IPv4 заняла менее секунды.
Проблема в том, что мой интернет-провайдер не поддерживает IPv6, но я включил его в свои свойства ethernet. После того, как я отключил Internet Protocol Version 6 (TCP/IPv6) в своих сетевых настройках, скорость установки/обновления значительно улучшилась (упала с 200 + секунд до 10)

Ответ 4

У меня была эта проблема во время работы Symfony2 на виртуальной машине с низкой памятью. Я увеличил память машины, и она значительно улучшилась. Вы можете проверить память в своей системе и посмотреть, можно ли ее обновить.

Ответ 5

Вы используете частный репозиторий. Это не позволит загрузить сжатую версию версии, которую вы включаете, но должна клонировать репозиторий. Кроме того, возможно, что весь репозиторий должен быть отсканирован, чтобы найти нужную версию.

Вы должны проверить, является ли использование Satis опцией. Таким образом, вы можете создавать ZIP файлы своего собственного программного обеспечения и загружать их так же, как и вещи, размещенные в Github (у которого есть API для этого, который используется Composer для загрузки ZIP файлов, даже если они явно не подготовлены).

Ответ 6

Действительно, xdebug, безусловно, будет замедлять работу. Однако удаление xdebug не является идеальным. Хороший вариант - использовать HHVM и поставить его на работу композитора.

Установка HHVM довольно безболезненна, и сам HHVM намного быстрее, чем PHP5. Это двойная победа - YMMV, но я получил почти 5-кратное увеличение скорости (на диване с глазным ядром, по общему признанию) в использовании композитора, которое я получил бы, даже если xdebug не был на картинке.

Если вы находитесь на OS X, эта ссылка может помочь (статья в блоге, которую я написал по этому вопросу):

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

Ответ 7

У меня была та же проблема с composer update, я обновил сам композитор до последней версии с помощью composer selfupdate обновления композитора, и теперь его скорость приемлема.

Ответ 8

Проверьте, установлены ли zip и unzip. Если они отсутствуют, Composer будет клонировать репозиторий вместо загрузки сжатого выпуска.

Ответ 9

Я добавил priordence :: ffff: 0: 0/96 100 в файл /etc/gai.conf и попробовал ваше обновление.