Почему для моих зависимостей композитора требуется до двух минут, даже если не было никаких изменений?
Ответ с высоким приоритетом предполагает добавление --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:password@git.com/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" } } }
Эта проблема часто связана с xdebug lodaed (неважно, включено или нет) в вашей среде CLI.
Вы можете проверить, что xdebug включен для CLI, используя:
// unix php -m | grep xdebug // windows php -m | findstr xdebug
Дополнительная информация о том, какие операции занимают так много времени, может быть достигнута за счет предоставления максимальной детализации и профилирующей информации:
composer install --prefer-dist -vvv --profile
или
composer update --prefer-dist -vvv --profile
Факторы, которые могут замедлить Композитор:
Как указано, 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
.
Похоже, проблема решена, но это может помочь кому-то.
Всякий раз, когда я запускал установку или обновление композитора, потребовалось больше 10 секунд, чтобы получить файл https://packagist.org/packages.json . В конце концов я узнал, что проблема связана с IPv6, поскольку выборка файлов с сайтов IPv4 заняла менее секунды.
Проблема в том, что мой интернет-провайдер не поддерживает IPv6, но я включил его в свои свойства ethernet. После того, как я отключил Internet Protocol Version 6 (TCP/IPv6)
в своих сетевых настройках, скорость установки / обновления значительно улучшилась (от 200+ секунд до 10)
Вы используете частный репозиторий. Это не позволит загрузить сжатую версию версии, которую вы включаете, но должна клонировать репозиторий. Кроме того, возможно, что весь репозиторий должен быть отсканирован, чтобы найти нужную версию.
Вы должны проверить, является ли использование Satis опцией. Таким образом, вы можете создавать ZIP-файлы своего собственного программного обеспечения и загружать его так же, как и вещи, размещенные в Github (у которого есть API для этого, который используется Composer для загрузки ZIP-файлов, даже если они явно не подготовлены).
У меня была эта проблема во время работы Symfony2 на виртуальной машине с низкой памятью. Я увеличил память машины, и она значительно улучшилась. Вы можете проверить память в своей системе и посмотреть, можно ли ее обновить.
Действительно, xdebug, безусловно, замедлит работу. Однако удаление xdebug не является идеальным. Хорошим вариантом является использование HHVM и включение его в обязанности композитора.
Установка HHVM довольно безболезненна, и сам HHVM намного быстрее, чем PHP5. Это двойная победа – YMMV, но я получил почти 5-кратное увеличение скорости (на диване с явным глазом) в использовании композитора, которое я получил бы, даже если xdebug не был на картинке.
Если вы находитесь на OS X, то эта ссылка может помочь (статья в блоге, которую я написал по этому вопросу):