Каковы способы ускорения процесса предварительной компиляции Rails Asset Pipeline?
Как вы можете ускорить процесс предварительной компиляции Rails Asset Pipeline?
Ответ 1
1. Ускорение развертывания Capistrano
(1) использовать встроенную задачу capistrano для развертывания/активов.
Capistrano имеет собственную встроенную задачу "развертывание/активы". Это автоматически сделает для вас задачу.
Разница между вашей собственной задачей handcraft заключается в том, что она загружает только группу assets для прекомпиляции активов, а не для всей среды.
 cd /home/apps/APP_NAME/releases/20120708184757 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile
(2) пропустить процесс прекомпиляции, когда активы не изменены.
https://gist.github.com/3072362
Если
- приложение/активы
 - Библиотека/активы
 - поставщика/активы
 - Gemfile.lock
 - confir/routes.rb
 
они будут перекомпилировать активы. В противном случае он пропустит процесс передачи, сэкономит много времени.
2. Используйте @import тщательно.
 (1) избегать прямого использования @import "compass";.
Он будет работать, когда вы
 @import "compass"; или @import "compass/typography/links/link-colors"; в SCSS.
Но @import "compass/typography/links/link-colors"; в 9 раз быстрее, чем @import "compass"; при компиляции активов.
Это потому, что когда @import "compass";, он компилирует все активы компаса. не только часть link-colors.
(2) избегать использования частичных
В SCSS нам нравится использовать partial для организации наших активов.
Но только если вам нужно обмениваться переменными или есть необходимые зависимости, в противном случае
//= require "reset"
//= require "base"
//= require "product"
быстрее, чем
@import "reset";
@import "base";
@import "product";
3. dont требуют .scss и. coffee без причины
(1) избегать использования require_tree
Когда мы используем генератор Rails для генерации контроллеров. Rails также генерирует активы, подобные этому
- product.css.scss
 - product.js.coffee
 
и монтируйте ресурсы в application.js, используя следующие методы:
//= require_tree
Но пустые активы (ничего не выводят), которые содержат только эти строки:
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
Это будет стоить вам около 250 мс для компиляции каждого из них. Если у вас 10 пустых активов, это будет 2,5 секунды.
Удалите их из своего проекта или установите их отдельно в application.js следующим образом:
//= require prodcuts
//= require users
//= require albums
 (2) Не используйте css.scss или js.coffee, если это не нужно.
- Скомпилированный jquery-ui-1.8.16.custom.css(0ms) (pid 19108)
 - Скомпилированный jquery.ui.1.8.16.ie.css(0ms) (pid 19108)
 - Скомпилированный jquery.js(5ms) (pid 19108)
 - Скомпилированный jquery_ujs.js(0ms) (pid 19108)
 - Скомпилированный custom.css(14ms) (pid 19108)
 
 custom.css custom.css.scss
Скомпилируйте чистый CSS и чистый JS быстро (стоимость почти 0 мс). Но компилировать .scss и .coffee все равно стоит некоторое время.
Обобщить
- заменить задачу deploy.rb assets.
 -  
проверить журналы /production.log
- найти медленные активы
 - удалить @import "компас"; используйте альтернативное решение.
 - используйте вместо @import; (используйте @import, когда это действительно необходимо)
 - удалить require_tree, самостоятельно установить ресурсы.
 - удалить пустые .scss и .coffeescript
 - используйте .css, когда активы являются чистыми CSS.
 
 
Ответ 2
Я только что написал камень для решения этой проблемы внутри Rails, называемый turbo-sprockets-rails3. Он ускоряет ваш assets:precompile путем перекомпиляции измененных файлов и только компиляции один раз для создания всех активов.
Обратите внимание, что я также пытаюсь объединить этот патч в Rails 4.0.0 и, возможно, Rails 3.2.9 (см. https://github.com/rails/sprockets-rails/pull/21). Но на данный момент было бы замечательно, если бы вы могли помочь мне протестировать камень turbo-sprockets-rails3 и сообщить мне, есть ли у вас какие-либо проблемы.
Ответ 3
(2) избегать использования частичных
В SCSS мы предпочитаем частично использовать наши ресурсы
В последнем railsconf был введен libsass.
Вероятно, все будет изменено и переписано в C, частичные части scss обещают быть быстрее