Jak przyspieszyć proces prekompilacji Rails Asset Pipeline?
Jakie są sposoby na przyspieszenie procesu prekompilacji Rails Asset Pipeline?
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
- zastąp deploy.RB assets task.
-
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)
- Usuń require_tree, montowanie zasobów indywidualnie
- Usuń puste .scss i .coffeescript
- użyj .css, gdy zasoby są czystym CSS.
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.
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
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