Как можно ускорить процесс предварительной компиляции Rails Asset Pipeline?
какими способами можно ускорить процесс предварительной компиляции Rails Asset Pipeline?
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 мс). Но скомпилировать .СКСС И.кофе все еще стоит немного время.
подведем итоги
- заменить развертывания.задачей активов РБ.
журналы проверки/производства.журнал
- найти медленные активы
- удалить @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 камень, и дайте мне знать, если у вас есть какие-либо проблемы.