Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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 обещают быть быстрее