Jak przyspieszyć proces prekompilacji Rails Asset Pipeline?

Jakie są sposoby na przyspieszenie procesu prekompilacji Rails Asset Pipeline?

Author: Brad Larson, 2012-07-09

3 answers

1. Capistrano deployment speedup

(1) Użyj capistrano wbudowanego zadania "deploy / assets" do wdrożenia.

Capistrano ma wbudowane zadanie "deploy/assets". Automatycznie wykona zadanie za Ciebie.

Różnica między twoim własnym zadaniem handcraft polega na tym, że tylko załaduj grupę assets do prekompilowania zasobów, a nie całego środowiska.

cd /home/apps/APP_NAME/releases/20120708184757 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile

(2) pomiń proces precompile, gdy zasoby nie są zmieniony.

Https://gist.github.com/3072362

If

  • app / assets
  • lib / aktywa
  • Sprzedający / aktywa
  • Gemfile.lock
  • confir / trasy.rb

Zostaną zmienione, to przekompiluje aktywa. W przeciwnym razie pomija proces pecompile, oszczędzając dużo czasu.

2. Używaj @ import ostrożnie.

(1) unikaj bezpośredniego używania @import "compass";.

To będzie działać, gdy ty

@import "compass"; lub @import "compass/typography/links/link-colors"; w SCSS.

Ale @import "compass/typography/links/link-colors"; jest 9 razy szybszy niż @import "compass"; podczas kompilacji zasobów.

To dlatego, że kiedy @import "compass";, kompiluje całe zasoby compass. nie tylko link-colors część.

(2) unikaj używania częściowych

W SCSS lubimy używać partial do organizowania naszych zasobów.

Ale tylko wtedy, gdy potrzebujesz współdzielić zmienne lub istnieją niezbędne zależności, w przeciwnym razie

//= require "reset"
//= require "base"
//= require "product"

Jest szybszy niż

@import "reset";
@import "base";
@import "product";

3. nie wymagaj .scss & .kawa na nie reason

(1) unikaj używania require_tree

Kiedy używamy rails generator do generowania kontrolerów. Rails będzie również generować takie zasoby

  • produkt.css.scss
  • produkt.js.kawa

I zamontować zasoby w aplikacji.js przy użyciu tej techniki:

//= require_tree

Ale puste zasoby (nic wyjściowego), które zawierają tylko te linie:

# 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/

Skompilowanie każdego z nich będzie kosztować około 250ms. Jeśli masz 10 pustych zasobów, to 2,5 sekundy .

Usuń je z projektu lub zamontuj indywidualnie w aplikacji.js jak to:

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

(2) nie używaj css.scss lub js.coffee, jeśli jest to niepotrzebne.

  • skompilowany jquery-ui-1.8.16.na zamówienie.css (0ms) (pid 19108)
  • Jest to bardzo proste i łatwe w obsłudze narzędzie do tworzenia stron internetowych.]}
  • skompilowany jquery.js (5ms) (pid 19108)
  • skompilowany jquery_ujs.js (0ms) (pid 19108)
  • skompilowany custom.css (14ms) (pid 19108)

custom.css jest custom.css.scss

Kompilacja czystego CSS i czystego JS jest szybka (koszt prawie 0 ms). / Align = "left" / scss i .kawa wciąż kosztuje trochę czasu.

Podsumuj

  1. zastąp deploy.RB assets task.
  2. Sprawdź dzienniki / produkcję.log

    • znajdź wolne aktywa
    • Usuń @ import "kompas"; użyj alternatywnego rozwiązania.
    • W tym celu należy użyć polecenia require zamiast @import; ( użyj @import, gdy jest to naprawdę konieczne)
  3. Usuń require_tree, montowanie zasobów indywidualnie
  4. Usuń puste .scss i .coffeescript
  5. użyj .css, gdy zasoby są czystym CSS.
 79
Author: xdite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-18 06:43:30

Właśnie napisałem klejnot do rozwiązania tego problemu wewnątrz szyn, o nazwie turbo-sprockets-rails3 . Przyspiesza assets:precompile tylko rekompilując zmienione pliki i kompilując tylko raz w celu wygenerowania wszystkich zasobów.

Zauważ, że próbuję również połączyć tę łatkę z Rails 4.0.0 i ewentualnie Rails 3.2.9 (zobacz https://github.com/rails/sprockets-rails/pull/21 ). ale na razie byłoby super, gdybyś pomógł mi przetestować turbo-sprockets-rails3 gem, i daj znać, jeśli będziesz miał jakieś problemy.

 20
Author: ndbroadbent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-03 00:20:40

(2) unikaj używania częściowych

W SCSS lubimy używać częściowego do organizowania naszych zasobów

Na najnowszym railsconf pojawił się libsass.

Prawdopodobnie rzeczy się zmienią i zostaną przepisane w C, częściowe scss obiecują być szybsze

 2
Author: Vlad Bokov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-13 18:29:38