Ответ 1
Также отключите xdebug. Xdebug может заставить Composer принимать минуты, даже когда команда выполняется так же просто, как composer --version
.
Почему композитор настолько медленный, когда все, что я делаю, - это инициировать проект с нулевыми зависимостями? Вот команды, которые я запускаю:
composer init
composer install
Подождите 3 минуты (не преувеличение).
Все, что должен сделать композитор, - это забрать автозагрузчик и создать /vendor
, так почему это так долго? В этом случае, почему этот этап не происходит в composer init
?
Есть ли вариант конфигурации, который я могу использовать для запуска кэшированного автозагрузки и поставщика при init
?
Также отключите xdebug. Xdebug может заставить Composer принимать минуты, даже когда команда выполняется так же просто, как composer --version
.
Потому что композитор реализует file_get_contents()
. У этого нет оптимизаций TCP, нет Keep-Alive, нет мультиплексирования...
Я создал плагин для загрузки пакетов параллельно.
https://packagist.org/packages/hirak/prestissimo
$ composer global require hirak/prestissimo
Попробуйте. В моей среде composer install
становится в 10 раз быстрее.
composer global require "squizlabs/php_codesniffer=*" -vvv
composer config --global repo.packagist composer https://packagist.org
Тоже самое. Подробнее см. В разделе "Установка композитора --profile -vvv". В моем случае для загрузки нескольких файлов json требуется много времени. Они кэшируются на моем сервере, но все еще загружаются с каждым вызовом обновления/установки композитора.
... 30 минут спустя...
Похож на некоторые проблемы с производительностью @packagist.org. Теперь установка композитора выполняется в течение 2 секунд! И загруженные json файлы правильно кэшируются.
Я столкнулся с этой проблемой, и это бросило меня за поворот, так как у меня на моей машине не установлен XDebug. Оказывается, это был сбой режима адресации IPv6. Итак, чтобы проверить я побежал
curl --ipv4 'https://packagist.org/packages.json'
curl --ipv6 'https://packagist.org/packages.json'
IPv4 прошел, но IPv6 не работает. В конце вы должны выяснить, почему ваш сетевой стек не поддерживает его, но в моем случае я решил отдать предпочтение трафику IPv4, пока не смогу его решить. В CentOS я создал/изменил файл /etc/gai.conf и вставил следующее:
label ::1/128 0
label ::/0 1
label 2002::/16 2
label ::/96 3
label ::ffff:0:0/96 4
precedence ::1/128 50
precedence ::/0 40
precedence 2002::/16 30
precedence ::/96 20
precedence ::ffff:0:0/96 100
В Ubuntu вы также можете редактировать этот файл и раскомментировать строку
precedence ::ffff:0:0/96 100
Если какой-либо из вышеперечисленных ответов не работает, проверьте, разрешен ли ваш брандмауэр для TCP_OUT на порту 9418. Моя безопасность в брандмауэре была слишком резкой. Это заставило композитора занять так много времени, я не получил ни одного тайм-аута или указания, что порт заблокирован. Надеюсь, поможет!
На Ubuntu Xenial 16.04 VPS вам необходимо сделать следующее:
sudo sh -c "echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf"
composer global require hirak/prestissimo