Znaczenie interpretowane lub skompilowane w JavaScript

click fraud protection

Komputery nie mogą faktycznie uruchomić kodu, w którym się piszesz JavaScript (lub jakikolwiek inny język w tym zakresie). Komputery mogą uruchamiać tylko kod maszynowy. Kod maszynowy, który może uruchomić dany komputer, jest zdefiniowany w procesorze, który ma uruchamiać te polecenia i może być różny dla różnych procesorów.

Oczywiście, pisanie kodu maszynowego było trudne do zrobienia dla ludzi (125 to polecenie dodania lub 126, a może 27). Aby obejść ten problem, stworzono tak zwane języki asemblera. Języki te używały bardziej oczywistych nazw poleceń (takich jak ADD do dodawania), a tym samym eliminowały potrzebę zapamiętywania dokładnych kodów maszynowych. Języki asemblera nadal mają relację jeden do jednego z konkretnym procesorem i kodem maszynowym, na który komputer konwertuje te polecenia.

Języki asemblera muszą być kompilowane lub interpretowane

Bardzo wcześnie okazało się, że łatwiej jest pisać Języki były potrzebne i że sam komputer mógłby zostać wykorzystany do przetłumaczenia ich na instrukcje kodu maszynowego, które komputer może właściwie zrozumieć. Przy tym tłumaczeniu można zastosować dwa podejścia i wybrano obie alternatywy (jeden lub drugi będzie używany w zależności od używanego języka i miejsca jego uruchomienia).

instagram viewer

Skompilowany język to taki, w którym po napisaniu programu podajesz kod przez program o nazwie a kompilator i to tworzy wersję kodu maszynowego programu. Aby następnie uruchomić program, wystarczy wywołać wersję kodu maszynowego. Jeśli wprowadzisz zmiany w programie, musisz go ponownie skompilować przed przetestowaniem zmienionego kodu.

Zinterpretowany język to taki, w którym instrukcje są konwertowane z tego, co napisałeś na kod maszynowy podczas działania programu. Zinterpretowany język w zasadzie pobiera instrukcję ze źródła programu, konwertuje ją na maszynę kod, uruchamia ten kod maszynowy, a następnie pobiera następną instrukcję ze źródła, aby powtórzyć proces.

Dwa warianty kompilacji i interpretacji

Jeden wariant wykorzystuje proces dwuetapowy. W tym wariancie źródło programu jest kompilowane nie bezpośrednio w kodzie maszynowym, ale zamiast tego jest konwertowany na język asemblera, który jest nadal niezależny od konkretnego edytor. Gdy chcesz uruchomić kod, przetwarza on skompilowany kod przez interpreter właściwy dla procesora, aby uzyskać kod maszynowy odpowiedni dla tego procesora. Takie podejście ma wiele zalet kompilacji przy jednoczesnym zachowaniu niezależności procesora, ponieważ ten sam skompilowany kod może być interpretowany przez wiele różnych procesorów. Java jest jednym językiem, który często korzysta z tego wariantu.

Drugi wariant nazywany jest kompilatorem Just in Time (lub JIT). Przy takim podejściu kompilator nie uruchamia się po napisaniu kodu. Zamiast tego dzieje się to automatycznie po uruchomieniu kodu. Za pomocą kompilatora Just in Time kod nie jest interpretowany instrukcja po instrukcji, jest on kompilowany w jednym idź za każdym razem, gdy jest uruchamiany, a następnie pobiera właśnie utworzoną wersję skompilowaną biegać. Takie podejście sprawia, że ​​wygląda to tak, jakby kod był interpretowany, tyle że zamiast błędów można było znaleźć tylko, gdy instrukcja z błąd został osiągnięty, wszelkie błędy wykryte przez kompilator nie powodują uruchomienia żadnego kodu zamiast całego kodu do tego momentu biegać. PHP jest przykładem języka, który zwykle używa właśnie do kompilacji czasu.

Czy JavaScript jest kompilowany lub interpretowany?

Teraz wiemy już, co oznacza interpretowany kod i skompilowany kod. Pytanie, na które musimy odpowiedzieć, to co to wszystko ma wspólnego z JavaScriptem? W zależności od tego, gdzie dokładnie uruchomisz JavaScript, kod może zostać skompilowany lub zinterpretowany lub użyć jednego z dwóch pozostałych wymienionych wariantów. Przeważnie jesteśuruchamianie JavaScript w przeglądarce internetowej i tam JavaScript jest zwykle interpretowany.

Języki interpretowane są zwykle wolniejsze niż języki skompilowane. Istnieją dwa powody tego. Po pierwsze, kod, który ma być interpretowany, musi zostać zinterpretowany, zanim będzie można go uruchomić, a po drugie, tak ma się zdarzyć za każdym razem, gdy instrukcja ma zostać uruchomiona (nie tylko za każdym razem, gdy uruchamiasz JavaScript, ale jeśli jest on włączony za pętla wtedy należy to robić za każdym razem wokół pętli). Oznacza to, że kod napisany w JavaScript będzie działał wolniej niż kod napisany w wielu innych językach.

W jaki sposób wiedza na ten temat pomaga nam, gdy JavaScript jest jedynym dostępnym językiem dla wszystkich przeglądarek internetowych? Sam interpreter JavaScript wbudowany w przeglądarkę internetową nie jest napisany w JavaScript. Zamiast tego jest napisany w innym języku, który został następnie skompilowany. Oznacza to, że możesz przyspieszyć działanie JavaScript, jeśli będziesz mógł skorzystać z poleceń udostępnianych przez JavaScript, które umożliwiają odciążenie zadania do samego silnika JavaScript.

Przykłady szybszego uruchamiania JavaScript

Przykładem tego jest to, że niektóre, ale nie wszystkie przeglądarki zaimplementowały metodę document.getElementsByClassName () w silniku JavaScript, podczas gdy inne jeszcze tego nie zrobiły. Gdy potrzebujemy tej konkretnej funkcji, możemy sprawić, że kod działa szybciej w tych przeglądarkach, w których silnik JavaScript zapewnia go za pomocą funkcji wykrywanie, czy metoda już istnieje, i tworzenie własnej wersji tego kodu w JavaScript tylko wtedy, gdy silnik JavaScript go nie zapewnia nas. Tam, gdzie silnik JavaScript zapewnia tę funkcjonalność, powinien działać szybciej, jeśli korzystamy z niego, a nie uruchamiamy własną wersję napisaną w JavaScript. To samo dotyczy przetwarzania, które silnik JavaScript udostępnia nam do bezpośredniego połączenia.

Będą również przypadki, w których JavaScript zapewnia wiele sposobów na wykonanie tego samego żądania. W takich przypadkach jeden ze sposobów dostępu do informacji może być bardziej szczegółowy niż drugi. Na przykład document.getElementsByTagName („tabela”) [0] .tBodies i document.getElementsByTagName („tabela”) [0] .getElementsByTagName („tbody”) oba pobierz tę samą listę węzłów znaczników tbody w pierwszej tabeli na stronie internetowej, jednak pierwsza z nich jest konkretnym poleceniem do pobierania znaczniki tbody, w których drugi wskazuje, że pobieramy znaczniki tbody w parametrze, a inne wartości można podstawić, aby pobrać inne tagi. W większości przeglądarek krótszy i bardziej szczegółowy wariant kodu będzie działał szybciej (w niektórych przypadkach znacznie szybciej) niż w drugim wariancie, dlatego warto stosować krótsze i bardziej szczegółowe wersja. Ułatwia także czytanie i utrzymanie kodu.

Teraz w wielu z tych przypadków rzeczywista różnica w czasie przetwarzania będzie bardzo mała i nastąpi tylko wtedy, gdy dodajesz wiele takich kodów razem, aby uzyskać zauważalną różnicę w czasie, jaki zajmuje Twój kod biegać. Rzadko zdarza się jednak, że zmiana kodu w celu przyspieszenia jego działania spowoduje, że będzie on znacznie dłuższy lub trudniejszy w utrzymaniu, a często odwrotna sytuacja będzie prawdą. Dodatkową korzyścią jest możliwość tworzenia przyszłych wersji silników JavaScript, które przyspieszają nawet bardziej konkretny wariant ponadto użycie określonego wariantu może oznaczać, że Twój kod będzie działał szybciej w przyszłości, bez konieczności zmiany czegokolwiek.

instagram story viewer