2011-10-18 18 views
15

Mam dość duży JavaScript dla strony HTML dla urządzenia.JavaScript Just In Time compilation

Ale jest nieco powolny. Próbowałem kompresować pliki JavaScript, ale nadal nie jest zadowalające.

Tak więc myślałem, czy można to zrobić jako "Just in Time", który jest konwertowany na kod maszynowy i używać go? (Mam nadzieję, że moje zrozumienie jest poprawne) Używam przeglądarki opartej na WebKit.

Wszyscy, którzy to zrobili, proszę podać linki do stron "Jak to zrobić" lub informacje o tym samym.

+8

Silnik JavaScript zawsze kompiluje "na czas"; nie możesz obsługiwać binarnego JavaScriptu lub czegoś podobnego. Jednak nigdy nie powinno to stanowić problemu. Czy na pewno nie możesz zaimplementować leniwego ładowania, aby zawartość była ładowana/pobierana tylko podczas przewijania zawartości do widoku? – pimvdb

+0

@pimvdb Teraz możesz uruchomić skompilowany kod asm.js we wszystkich nowoczesnych przeglądarkach przy użyciu Emscripten. – niutech

Odpowiedz

49

Zarówno Safari, jak i Chrome już kompilują JIT. W rzeczywistości, jedyną przeglądarką w powszechnym użyciu, która nie jest IE8 i wcześniej. Jest to jeden z głównych powodów, dla których IE8 jest obecnie wolniejsze niż konkurencja.

Ale czytając między liniami twojego pytania, domyślam się, że nie całkiem rozumiesz, co to jest kompilacja JIT. Kompilacja JIT odbywa się w przeglądarce; nie musisz w żaden sposób zmieniać kodu, aby przeglądarka mogła wykonać dla ciebie kompilację JIT.

Wygląda na to, że tak naprawdę myślisz o kompilacji kodu bajtowego, na przykład Java. Ten kod bajtowy jest faktycznie językiem w połowie skompilowanym, który sam w sobie jest kompilowany JIT podczas uruchamiania programu. Jeśli o tym myślisz, mogę potwierdzić, że nie jest to opcja dla kodu JavaScript w przeglądarce.

Google bawił się technologią o nazwie "Klient natywny" (NaCl), która umożliwia dostarczanie skompilowanego kodu do przeglądarki, ale nie jest to jeszcze dostępne, z wyjątkiem wersji rozwojowych przeglądarki Chrome.

W każdym przypadku kompilacja może sprawić, że twój kod będzie działał szybciej, ale nie rozwiąże podstawowego problemu, dlaczego działa on powoli, co może być o wiele lepszym rozwiązaniem. (nawet skompilowany kod będzie działał źle, jeśli ma wąskie gardła, kompilacja sama w sobie nie poprawia w magiczny sposób powolnego kodu)

Jeśli chcesz dowiedzieć się, dlaczego skrypt działa wolno, polecam użyć narzędzia do profilowania, takiego jak ten wbudowany w Firebug lub narzędzia programistyczne Chrome. Pomoże to zidentyfikować części kodu, które działają powoli.

Można również wypróbować narzędzie YSlow, które może również dostarczyć przydatnych informacji na temat wydajności javascript.

Podkreślasz również, że skompresowałeś skrypt, aby spróbować go przyspieszyć. Skompresowanie skryptu pomoże mu szybciej uzyskać (ponieważ jest to mniejszy plik), ale nie zrobi nic z szybkością, z jaką działa kod.

Mam nadzieję, że to pomaga.

+0

@pimvdb - wystarczy; Ostatnim razem wyglądałem, jak to było w dev, ale Chrome porusza się szybko, a ja nie nadążam. Niemniej jednak jest to tylko w Chrome, a to nie nadaje się do ogólnego użytku w Internecie. – Spudley

+0

Przepraszam, że mylę rzeczy. Wygląda na to, że jeszcze nie. – pimvdb

+0

@Spudley Dzięki za zrozumienie mojego zrozumienia. Zgodnie z sugestią zacząłem już profilować i dowiedzieć się, gdzie to trwa.Ponieważ aplikacja HTML została nadana przez inne ciało, potrzeba dużo czasu i energii, aby zmienić kod. :(Stąd próbowałem szukać szybkiej poprawki Również w moim rozumieniu, JavaScript używa głównie porównania ciągów dla wielu rzeczy stąd robiłem "Kompresuj" lub używając "Kompresora Clouser", aby zoptymalizować JavaScript. – hari