2013-01-11 9 views
10

Mam dużą aplikację szyny z setkami plików skryptów kawy.Kompilacja wolniejszych składników w trybie programowania

Czasami kiedy zrobić malutką zmianę w pliku coffeescript lub przełączyć oddział całe aktywa są skompilowany i muszę długo czekać na obciążenie strony:

Started GET "/assets/application.js" for 127.0.0.1 at 2013-01-11 19:39:45 +0100 
Compiled sprockets/commonjs.js (0ms) (pid 18142) 
Compiled jquery.js (2ms) (pid 18142) 
Compiled jquery_ujs.js (0ms) (pid 18142) 
Compiled underscore.js (0ms) (pid 18142) 
Compiled backbone.js (0ms) (pid 18142) 
Compiled backbone_rails_sync.js (0ms) (pid 18142) 
Compiled handlebars.runtime.js (0ms) (pid 18142) 
Compiled moment.js (0ms) (pid 18142) 
...and so on 

używam następujących konfiguracja aktywa config/development.rb:

# Do not compress assets 
config.assets.compress = false 

# Expands the lines which load the assets 
config.assets.debug = false 

Kiedy ustawić config.assets.debug = false muszę czekać dość długo na obciążenia setek plików jS. Pytanie brzmi: jak znaleźć złoty środek? Jak zoptymalizować konfigurację zasobów w trybie projektowania dla dużej aplikacji?

+2

Czy spojrzałeś na to: http://stackoverflow.com/questions/11390447/how-can-you-speed-up-the-rails-asset-pipeline-precompile-process i ten https: // github. com/wavii/rails-dev-tweaks? –

+0

Szczerze mówiąc nie ufam żadnym bibliotekom/obejściom innych firm. Szukam rozwiązania w postaci czystych szyn w przypadku uchwytów takich jak ten. – luacassus

+0

Setki plików js x 0ms wciąż jest bardzo krótkich, czy brakuje mi czegoś? – sevenseacat

Odpowiedz

2

To smutna prawda, ale ty nie. Nie ma czystej metody rozwiązania tego problemu.

Istnieje jednak kilka wzorców, które można wykonać, aby zminimalizować ból, który, jeśli dobrze rozumiem, musi długo czekać na rozwój, aby zobaczyć zmiany.

Jak już wspomniano, widziano je here1 i here2.

  1. Spójrz na pozycję 2 z here1.
  2. Podziel zasoby w wielu plikach. Będzie to oznaczało, że w przypadku zmiany linii będzie przetwarzanych mniej linii.
  3. Preferuj css/js, mogą nie być tak fajne, ale nie wymagają kompilacji.
  4. Znajdź coś ciekawego do zrobienia, podczas gdy aktywa prekompilują. Może obniżyć wydajność, ale z pewnością zabije ból.
0

Jak zauważyli inni, optymalizacja zasobów jest # 1 sposobem na zwiększenie szybkości kompilacji (wyeliminowanie niepotrzebnych plików i preprocesorów, ostrożne importowanie i ostrożność przy użyciu części). Dlaczego jednak tak czy inaczej zmieniasz tryb programowania w config.assets.debug = false? Gdy jest to fałsz, koła zębate łączą wszystkie pliki razem, a to może zająć sporo czasu, jeśli masz dużą liczbę plików.

Zamiast tego zamień config.assets.debug = true, aby zasoby zostały skompilowane i zbuforowane przy pierwszym żądaniu. Koło zębate ustawia nagłówek HTTP Cache-Control, aby zmniejszyć narzut związany z kolejnymi żądaniami. Przeglądarka otrzymuje odpowiedź 304 (niezmodyfikowaną). Zobacz dokumentację Railsów Asset Pipeline.

7

Spójrz na this middleware od zespołu Dyskurs. Odnieśliśmy z tego wielki sukces w naszej aplikacji rails 4 - wznowiliśmy czasy ładowania z minuty na 5 sekund w fazie rozwoju.

+0

Pomogło mi to zaoszczędzić sporo czas. Wielkie dzięki. – skmvasu

+0

Idealny! skróciło czas z około 3000ms do 700ms – MhdSyrwan

Powiązane problemy