Почему так медленно работает php-композитор?

Почему композитор настолько медленный, когда все, что я делаю, - это инициировать проект с нулевыми зависимостями? Вот команды, которые я запускаю:

composer init

composer install

Подождите 3 минуты (не преувеличение).

Все, что должен сделать композитор, - это забрать автозагрузчик и создать /vendor, так почему это так долго? В этом случае, почему этот этап не происходит в composer init?

Есть ли вариант конфигурации, который я могу использовать для запуска кэшированного автозагрузки и поставщика при init?

Ответ 1

Также отключите xdebug. Xdebug может заставить Composer принимать минуты, даже когда команда выполняется так же просто, как composer --version.

Ответ 2

Потому что композитор реализует file_get_contents(). У этого нет оптимизаций TCP, нет Keep-Alive, нет мультиплексирования...

Я создал плагин для загрузки пакетов параллельно.
https://packagist.org/packages/hirak/prestissimo

$ composer global require hirak/prestissimo

Попробуйте. В моей среде composer install становится в 10 раз быстрее.

Ответ 3

  1. Убедитесь, что у вас установлена последняя версия Composer.
  2. Установите в подробном режиме, добавив -vvv, например, для composer global require "squizlabs/php_codesniffer=*" -vvv
  3. Если вы можете узнать, где композитор сталкивается с медлительностью, например, моя застряла в течение 5 минут при загрузке пакетов. Потребовалось> 5 минут, чтобы загрузить файл размером 20 Кбит на соединение 50 Мбит/с. Это было связано с тем, что он загружал пакеты из пакета, используя http, а не https. Выполнение этих изменений в конфиге разрешило мою проблему: composer config --global repo.packagist composer https://packagist.org

Ответ 4

Тоже самое. Подробнее см. В разделе "Установка композитора --profile -vvv". В моем случае для загрузки нескольких файлов json требуется много времени. Они кэшируются на моем сервере, но все еще загружаются с каждым вызовом обновления/установки композитора.

... 30 минут спустя...

Похож на некоторые проблемы с производительностью @packagist.org. Теперь установка композитора выполняется в течение 2 секунд! И загруженные json файлы правильно кэшируются.

Ответ 5

Я столкнулся с этой проблемой, и это бросило меня за поворот, так как у меня на моей машине не установлен 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

Источник в Rackspace Community Hub

Ответ 6

Если какой-либо из вышеперечисленных ответов не работает, проверьте, разрешен ли ваш брандмауэр для TCP_OUT на порту 9418. Моя безопасность в брандмауэре была слишком резкой. Это заставило композитора занять так много времени, я не получил ни одного тайм-аута или указания, что порт заблокирован. Надеюсь, поможет!

Ответ 7

На Ubuntu Xenial 16.04 VPS вам необходимо сделать следующее:

sudo sh -c "echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf"
composer global require hirak/prestissimo