[js] Optymalizacja jQuery

0

Czy ktoś orientuje się czym skompresowane jest jquery? Albo jaki jest inny jeszcze lepszy sposób na zmniejszenie objętości kodu i przyspieszenia go?

0
Bartosz765 napisał(a)

Czy ktoś orientuje się czym skompresowane jest jquery? Albo jaki jest inny jeszcze lepszy sposób na zmniejszenie objętości kodu i przyspieszenia go?

niestety ale najczęściej zmniejszenie objętości kodu nie idzie w parze z przyśpieszeniem. Chodzi o to, że często stosuje się funkcje eval która wykonuje kod zawarty w stringu, a sam kod kompresuje się do stringa właśnie, by później funkcją odwrotną odtworzyć poprzedni stan kodu z zaszyfrowanej postaci. Jak widać dochodzi tutaj dodatkowo czas "rozpakowywania kodu" ze stringa no i eval też swoje dokłada.

co do jquery to się specjalnie na tym nie kryją - masz przecież na głównej stronie napisane minified and gzipped. Jest wiele takich kompresorów działających 'online' np: http://jscompress.com/

0

Znalazłem kilka takich kompresorów np EMCA Crusher, ale zależy mi na najbardziej wydajnym i maksymalnie zaciemniającym kod

0

Po cholerę miałby ktoś kompresować javascriptem kod javascriptowy?

"Minifying" oznacza ni mniej ni więcej niż tylko skracanie nazw zmiennych, funkcji, inlinowanie bardzo rzadko używanych funkcji itp itd, usuwanie komentarzy, białych znaków, możliwe że jakaś wstępna ewaluacja, czy zamiana calych wyrażeń na krótsze odpowiedniki.

Potem kod jest kompresowany GZIPem i wysylany do usera. Prawie wszystkie nowoczesne przeglądarki obsługują kompresję GZIP.

http://closure-compiler.appspot.com/home minifier od Google'a.

0

@abc:
Niezupełnie tak jest. Tzn. samorozpakowujący się kod JavaScript działa mniej więcej tak, jak opisałeś. Ale tego sposobu nie polecam i z reguły nie stosuję, choćby ze względów wydajnościowych.

Natomiast zastosowanie minifikacji/obfuskacji (usunięcie białych znaków, zastąpienie długich nazw zmiennych krótkimi itp.) NIE spowalnia kodu i jest absolutnie bezpieczne. To polecam i często stosuję.

@Bartosz765:
Polecam YUI Compressor. Pogoogluj. Jest też wersja online, ale ja sobie przygotowałem buildera do mojego IDE. Z pomocą pliku makefile automatycznie odpalany jest YUI Compressor gdy tylko zmienię jakiś plik.

YUI Compressor jest dużo lepszy niż linkowany przez @abc JSMin, który nie skraca nazw zmiennych lokalnych (a to podstawa!). Nie będę robił porównania z packerem. Moim zdaniem packer jest dobry, ale działa po prostu inaczej -- to już jest właśnie tworzenie "samorozpakowujących się" skryptów.

edit:
@donki7:
Ten samorozpakowujący się kod JS jest zwykle mniejszy niż po minifikacji. Nie dotyczy to bardzo małych plików, ale w przypadku średnich i większych różnica jest zauważalna. Minus jest taki, że praktycznie nie da się tego debugować i trudniej jest kod zrozumieć (co w sumie bywa plusem), a poza tym skrypt wolniej się ładuje (i zamraża wtedy interfejs strony) z uwagi na konieczność rozpakowania się.

Co do GZIP-a to jest on jak najbardziej super i w ogóle, ale wbrew pozorom nie zawsze jest dostępny. Niektóre proxy (narzucane przez ISP) nie pozwalają na GZIPowanie.

edit2:
Btw., nazwa tematu trochę bez sensu. Myślałem, że będzie chodziło o polepszenie wydajności działania kodu opartego o jQuery, bo to też jest istotny i częsty problem. Nie lepiej "[JS] Zmniejszanie objętości i przyspieszanie kodu"?

O przyspieszaniu jeszcze nikt nie mówił. Cóż, minifikacja nie przyspiesza, ale też nie zwalnia. Pakowanie w stylu packera spowalnia kod. Żeby dostać istotnie szybszy kod, musisz... umieć go pisać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1