Ускоряем Composer

Пакетный менеджер 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,
    }
  }
}