Медленная компиляция активов в режиме разработки

У меня есть большое приложение с рельсами с сотнями файлов кофе script.

Иногда, когда я делаю небольшое изменение в файле coffeescript или я переключаю ветвь, все активы предварительно скомпилированы, и мне приходится долго ждать загрузки страницы:

Started GET "/assets/application.js" for 127.0.0.1 at 2013-01-11 19:39:45 +0100
Compiled sprockets/commonjs.js  (0ms)  (pid 18142)
Compiled jquery.js  (2ms)  (pid 18142)
Compiled jquery_ujs.js  (0ms)  (pid 18142)
Compiled underscore.js  (0ms)  (pid 18142)
Compiled backbone.js  (0ms)  (pid 18142)
Compiled backbone_rails_sync.js  (0ms)  (pid 18142)
Compiled handlebars.runtime.js  (0ms)  (pid 18142)
Compiled moment.js  (0ms)  (pid 18142)
...and so on

Я использую следующую конфигурацию активов config/development.rb:

# Do not compress assets
config.assets.compress = false

# Expands the lines which load the assets
config.assets.debug = false

Когда я устанавливаю config.assets.debug = false, я должен подождать довольно долгое время для загрузки сотен js файлов. Вопрос в том, как найти золотую середину? Как оптимизировать конфигурацию активов в режиме разработки для большого приложения?

Ответ 1

Это печальная правда, но вы этого не делаете. Существует нет чистого способа решить эту проблему.

Однако есть несколько шаблонов, которые вы могли бы выполнить, чтобы свести к минимуму вашу боль, которая, если я правильно понимаю, должна много ждать в развитии, чтобы увидеть изменения.

Как уже говорилось, это были здесь1 и here2.

  • Взгляните на пункт 2 из here1.
  • Разбивайте свои активы во многих файлах. Это будет означать, что при изменении происходят меньшее количество строк.
  • Предпочитаете css/js, они могут быть не такими классными, но не требуют компиляции.
  • Найдите что-то интересное, пока активы прекомпилируются. Это может снизить производительность, но, конечно, убивает боль.

Ответ 3

Как отмечали другие, оптимизация ваших активов - это способ # 1 увеличить скорость компиляции (исключить ненужные файлы и предварительные процессоры, тщательно импортировать и осторожно использовать частичные). Однако почему вы все равно поворачиваете config.assets.debug = false в режиме разработки? Когда он ошибочный, звездочки объединят все ваши файлы вместе, и это может занять довольно много времени, если у вас большое количество файлов.

Вместо этого включите config.assets.debug = true, поэтому активы скомпилируются и кэшируются по первому запросу. Звездочки устанавливают HTTP-заголовок Cache-Control, чтобы уменьшить накладные расходы при последующих запросах. Браузер получает ответ 304 (не измененный). См. Документацию Rails Asset Pipeline.