Я написал этот бит руководства.
Вы определенно не хотите жить в процессе компиляции.
Когда у вас есть компиляция, вот что происходит:
Каждый запрос файла в / assets передается в Sprockets. По запросу first для каждого актива, который он компилирует и кэширует во всем, что Rails использует для кэширования (обычно в файловой системе).
При последующих запросах Sprockets получает запрос и должен найти имя файла с отпечатками пальцев, проверить, что файл (изображение) или файлы (css и js), составляющие ресурс, не были изменены, а затем, если существует кэшированная версия служить этому.
То есть все в папке ресурсов и в любых папках поставщиков / ресурсов, используемых плагинами.
Это большие издержки, так как, если честно, код не оптимизирован для скорости.
Это повлияет на скорость передачи активов клиенту и негативно скажется на времени загрузки страницы вашего сайта.
Сравните со значением по умолчанию:
Когда ресурсы предварительно скомпилированы, а компиляция отключена, активы скомпилированы и имеют отпечатки пальцев до public/assets
. Sprockets возвращает таблицу сопоставления имен файлов с простым отпечатком в Rails, а Rails записывает это в файловую систему. Файл манифеста (YML в Rails 3 или JSON со случайным именем в Rails 4) загружается в Memory при помощи Rails при запуске и кэшируется для использования вспомогательными методами ресурса.
Это позволяет очень быстро генерировать страницы с правильными отпечатками, а сами файлы обрабатываются как веб-сервер из-за-файловой системы. Оба значительно быстрее, чем живая компиляция.
Чтобы получить максимальную выгоду от конвейера и дактилоскопии, вам нужно установить заголовки в далеком будущем на вашем веб-сервере и включить сжатие gzip для файлов js и css. Sprockets записывает сжатые версии ресурсов, которые вы можете настроить на использование своего сервера, избавляя от необходимости делать это для каждого запроса.
Это позволяет клиенту получать активы как можно быстрее и в наименьшем возможном размере, ускоряя отображение страниц на стороне клиента и сокращая (с заголовком в далеком будущем) запросы.
Итак, если вы работаете с компиляцией вживую, это:
- Очень медленно
- Не хватает компрессии
- Будет влиять на время рендеринга страниц
Versus
- Как можно быстрее
- Сжатый
- Удаление несанкционированного сжатия с сервера (опционально).
- Минимизируйте время рендеринга страниц.
Редактировать: (Ответ для последующего комментария)
Конвейер можно изменить на прекомпиляцию при первом запросе , но для этого есть некоторые серьезные препятствия. Во-первых, должна существовать таблица поиска имен с отпечатками пальцев, или вспомогательные методы слишком медленные. В соответствии с senario по компиляции по требованию должен быть какой-то способ добавить таблицу поиска при компиляции или запросе каждого нового ресурса.
Кроме того, кто-то должен будет заплатить цену медленной доставки активов в течение неизвестного периода времени, пока все активы не будут собраны и размещены.
Значение по умолчанию, при котором цена компиляции всего за один раз оплачивается в автономном режиме, не влияет на общедоступных посетителей и гарантирует, что все работает до того, как все заработает.
Суть сделки заключается в том, что она добавляет много сложности производственным системам.
[Редактировать, июнь 2015 г.] Если вы читаете это, потому что ищете решение для медленного времени компиляции во время развертывания, то вы можете рассмотреть возможность предварительной компиляции ресурсов локально. Информация об этом содержится в руководстве по конвейеру активов . Это позволяет вам прекомпилировать локально только при наличии изменений, зафиксировать их, а затем выполнить быстрое развертывание без этапа прекомпиляции.