Как можно ускорить процесс предварительной компиляции Rails Asset Pipeline?


какими способами можно ускорить процесс предварительной компиляции Rails Asset Pipeline?

3 61

3 ответа:

1. Ускорение развертывания Capistrano

(1) для развертывания используйте встроенную задачу capistrano "deploy/assets".

Capistrano имеет свою собственную встроенную задачу "развертывание / активы". Он будет автоматически выполнять задачи для вас.

разница между вашей собственной задачей ручной работы - это только загрузка 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

если

  • приложения/активов
  • lib / assets
  • поставщик/активы
  • Gemfile.замок
  • confir / маршруты.РБ

изменены, он будет перекомпилировать активов. В противном случае он пропустит процесс pecompile, сэкономит много времени.

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. не требуется .СКС & .кофе без причины

(1) избегайте использования require_tree

когда мы используем генератор рельсов для генерации контроллеров. Рельсы также будут генерировать активы, подобные этому

  • продукта.стиль CSS.СКС
  • продукта.js.кофе

и монтировать активы в приложении.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 секунды .

удалите их из вашего проекта или установите их отдельно в приложении.Яш такой:

//= require prodcuts
//= require users
//= require albums

(2) Не используйте css.scss или js.coffee если нет необходимости.

  • составлен jquery-ui-1.8.16.традиция.css (0ms) (pid 19108)
  • составлен с помощью jQuery.пользовательского интерфейса.1.8.16.т. е. УСБ (0мс) (пид 19108)
  • скомпилированный jquery.js (5ms) (pid 19108)
  • составлен jquery_ujs.js (0ms) (pid 19108)
  • скомпилированный пользовательский.css (14ms) (pid 19108)

custom.css и custom.css.scss

компилировать чистый CSS и чистый JS быстро (стоимость почти 0 мс). Но скомпилировать .СКСС И.кофе все еще стоит немного время.

подведем итоги

  1. заменить развертывания.задачей активов РБ.
  2. журналы проверки/производства.журнал

    • найти медленные активы
    • удалить @import "compass"; используйте альтернативное решение.
    • используйте require вместо @import; (используйте @import, когда это действительно необходимо)
    • удалить require_tree, монтировать активы по отдельности
    • удалить пустые .СКСС И.coffeescript
    • использовать .css, когда активы являются чистыми CSS.

Я только что написал драгоценный камень, чтобы решить эту проблему внутри рельсов, называется turbo-sprockets-rails3. Это ускоряет ваш assets:precompile только перекомпиляция измененных файлов и только компиляция один раз для создания всех активов.

обратите внимание, что я также пытаюсь объединить этот патч в Rails 4.0.0 и, возможно, Rails 3.2.9 (см. https://github.com/rails/sprockets-rails/pull/21). но сейчас было бы здорово, если бы вы могли помочь мне проверить turbo-sprockets-rails3 камень, и дайте мне знать, если у вас есть какие-либо проблемы.

(2) Избегайте использования частичных

в SCSS, мы хотели бы использовать частичное организовать наши активы

на последнем railsconf был введен libsass.

вероятно, все изменится и перепишется в C, SCSS partials обещают быть быстрее