it-swarm.com.ru

Почему php composer такой медленный?

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

composer init

composer install

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

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

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

63
AgmLauncher

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

23
adjco

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

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

composer install становится в 10 раз быстрее.

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

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

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

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

8
ppan

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

0
Aaron Chamberlain

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

0
gidomanders