2009-08-29 11 views
20

Właśnie znalazłem Dean Edwards javascript pakowacz tutaj: http://dean.edwards.name/packer/Czy kodowanie pliku javascript przez Base62 jest złe?

Ma kilka opcji,

  1. Base62 zakodować
  2. Shrink zmiennych

przetestować go wziąłem ostatni wersja jquery, która jest już zminimalizowana do 56kb i uruchomiona na powyższej stronie ze zmiennymi shrink, wynikiem jest plik o tym samym rozmiarze, 56kb.

Następnie ponownie uruchomiłem oryginalny plik z wybranymi zmiennymi Base62 i Shrink, a wynikiem był plik 42kb.

Teraz nie wiem zbyt wiele o zminimalizowaniu i pakowaniu innych, ponieważ zmniejsza to rozmiar pliku. Ale ciekawi mnie, co robi kod Base62, czy to źle? Widzę, że powoduje, że plik jest znacznie mniejszy, ale czy tworzy więcej pracy/obciążenia później, aby go rozszyfrować na stronie?

Odpowiedz

34

Bazy 62 to nic innego jak positional notation. Oznacza to, że może być używany do reprezentowania bardzo długiego normalnego tekstu przez bardzo krótszą wersję.

Używanie Base62 dodaje dodatkowy krok, zanim js może zostać użyty przez klientów. W przypadku biblioteki jQuery ten krok może trwać od 100 do 500 ms czasu na klientach, w zależności od wielu czynników.

Teraz możemy porównać redukcję czasu, aby pobrać skrypt do dodatkowego czasu potrzebnego do wykonania skryptu. Może skrócić czas pobierania o 50ms, ale zajmuje dodatkowe 100 ms, aby go przetworzyć. Zmniejsza zwroty !!

+0

dobrych punktów, dzięki, może powinienem trzymać się z dala od niego – JasonDavis

+0

Chciałbym również dodać, że jest to dobry zamiennik, jeśli serwer nie odpowiada gzip. Kieruj tylko na unikalne pliki aplikacji, a nie na biblioteki ze względu na dodatkową pracę. –

16

Tworzy więcej pracy na kliencie. Klient musi uruchomić kod, aby dekodować zakodowany skrypt. Jest to dość oczywiste, jeśli wprowadzisz trochę kodu w bloku kodującym.

Na przykład:

var a = 10; 

Koduje jak:

eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('0 1=2;',3,3,'var|a|10'.split('|'),0,{})) 
Powiązane problemy