Медленная компиляция активов в режиме разработки
У меня есть большое приложение с рельсами с сотнями файлов кофе 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, они могут быть не такими классными, но не требуют компиляции.
- Найдите что-то интересное, пока активы прекомпилируются. Это может снизить производительность, но, конечно, убивает боль.
Ответ 2
Посмотрите это промежуточное программное обеспечение из команды Discourse. Мы успешно справились с этим в наших приложениях с рельсами 4 - потребовали перезарядки с минуты до 5 секунд в разработке.
Ответ 3
Как отмечали другие, оптимизация ваших активов - это способ # 1 увеличить скорость компиляции (исключить ненужные файлы и предварительные процессоры, тщательно импортировать и осторожно использовать частичные). Однако почему вы все равно поворачиваете config.assets.debug = false
в режиме разработки? Когда он ошибочный, звездочки объединят все ваши файлы вместе, и это может занять довольно много времени, если у вас большое количество файлов.
Вместо этого включите config.assets.debug = true
, поэтому активы скомпилируются и кэшируются по первому запросу. Звездочки устанавливают HTTP-заголовок Cache-Control, чтобы уменьшить накладные расходы при последующих запросах. Браузер получает ответ 304 (не измененный). См. Документацию Rails Asset Pipeline.