2010-09-27 9 views
7

Pozdrowienia Szyny i guru Javascript!Railsowe JavaScript kompresja/minifikacja w odpowiedzi na javascript?

Mam projektu gdzie wracam dużego pliku javascript w

respond_to do |format| 
    format.js 
end 

bloku.

Próbuję dowiedzieć się, jak zmniejszyć lub skompresować odpowiedź .js, ponieważ widok .js.erb jest pełen komentarzy i różni się rozmiarem w zależności od wyników z kontrolera.

Ktoś ma jakieś pomysły?

Odpowiedz

5

dobrze, może mam rozwiązanie:

respond_to do |format| 
    format.js { self.response_body = minify(render_to_string) } 
end 

To doskonale działa. Oczywiście kluczem jest metoda minify. Znajdziesz wiele minifiterów JS. Na przykład możesz go użyć (dobrze, jeśli zezwala na to licencja): http://github.com/thumblemonks/smurf/raw/master/lib/smurf/javascript.rb - jest oparty na jsmin.c Crockford.

Jeśli umieścisz ten plik do swojego lib, wymaga to Twój Minify metoda może wyglądać następująco:

def minify(content) 
    min = Smurf::Javascript.new(content) 
    min.minified 
end 

nadzieję, że ci pomogła.

Jeśli planujesz automatyczne minimalizowanie, prawdopodobnie powinieneś wybrać opcję oprogramowania pośredniego. Zaskakująco nie udało mi się znaleźć żadnego (jest wiele wycelowanych w CSS/JS, ale chodzi o zasoby statyczne, a nie dynamiczne), ale pisanie tego nie byłoby takim problemem.

+0

Dzięki pawien! To daje mi coś do myślenia na pewno. :) Przekazywanie wyniku do bloku i przetwarzanie go przy pomocy miniarki wydaje się dobrym rozwiązaniem. Następnie po prostu muszę dowiedzieć się, jak buforować dane wyjściowe. Będę grać z tym dzisiaj i jutro. Mogę cię oszukać. : D –

+2

Czy jest jakiś sposób, aby to zrobić w Rails3.2, tylko używając własnych wbudowanych funkcji potoków aktywów? –

+0

dzięki radek! fajne rozwiązanie. Nazar, dodał moje tory 3 zmodyfikowane nieco poniżej – djburdick

3

Dla szyn 3 za pomocą wbudowanego w metodzie Uglifier (domyślny dla rurociągu aktywów) Kod

Zobacz Radka powyżej i po prostu zamienić to w

def minify(content) 
    Uglifier.new.compile(content) 
    end 
12

dla szyn. 4:

render js: Uglifier.new.compile(render_to_string) 
Powiązane problemy