Пакетный менеджер Composer при выполнении команды install
или update
обращается к файлу composer.json
и последовательно обрабатывает указанные в нём пакеты. Если пакетов много, то эта процедура займёт довольно продолжительное время. Проблему могло бы решить распараллеливание процессов. И как раз для решения данной задачи чуть больше года назад был создан плагин Prestissimo. Он позволяет ускорить загрузку пакетов на порядок.
Для его установки в консоли нужно выполнить простую команду require
.
$ composer global require hirak/prestissimo
Обратите внимание, что устанавливает данный плагин нужно глобально.
После установки плагин будет срабатывать на каждое действие установки и обновления пакетов. Он параллельно подгрузит все зависимости и передаст их композеру.
В качестве профита от установки автор приводит результаты теста установки Laravel:
- 288 сек. — до установки плагина.
- 26 сек. — после установки.
Как видим, разница значительная.
Кроме того, Prestissimo даёт возможность более тонкой настройки в зависимости от предпочтений. Причём сделать это можно как глобально, так и для каждого проекта в отдельности. В первом случае, нужно создать/отредактировать файл ~/.composer/config.json
. Во втором, редактируем файл composer.json
пакета
{ ... "config": { "prestissimo": { "maxConnections": 6, "minConnections": 3, "verbose": false, "insecure": false, "cainfo": "/absolute/path/to/cacert.pem", "userAgent": "Your Awesome User Agent", "privatePackages": [ "myorg/private1", "myorg/private2", ... ] } } ... }
- maxConnections — максимальное количество соединений.
- minConnections — минимальное количество соединений.
- verbose — настройка CURLOPT_VERBOSE.
- insecure — если включено, то не проверяет https сертификаты (настройка CURLOPT_SSL_VERIFYPEER выключена). Не рекомендуется менять эту настройку.
- capath — абсолютный путь до
cacert.pem
при работе с сертификатами. - userAgent — юзер-агент, который указывается при скачивании пакетов (настройка CURLOPT_USERAGENT). Если не задано, то используется юзер-агент от composer.
- privatePackages — список приватных пакетов. Для перечисленных пакетов локальный редиректор с api.github.com на codeload.github.com будет отключен.
Я использую такой конфиг:
{ ... "config": { "prestissimo": { "maxConnections": 10, "minConnections": 3, } } }