JavaScript tolkat eller sammanställt?

Datorer kan faktiskt inte köra koden som du skriver i JavaScript (eller något annat språk för den delen). Datorer kan bara köra maskinkod. Maskinkoden som en viss dator kan köra definieras i processorn som kommer att köra dessa kommandon och kan vara olika för olika processorer.

Uppenbarligen var det svårt att skriva maskinkod för människor (är 125 ett kommando för tillägg eller är det 126 eller kanske 27). För att komma runt det problemet skapades vad som kallas montagespråk. Dessa språk använde mer uppenbara namn för kommandona (som ADD för att lägga till) och avlägsnade därmed behovet av att komma ihåg de exakta maskinkoderna. Monteringsspråk har fortfarande en till en-relation med den specifika processor och maskinkod som datorn konverterar dessa kommandon till.

Församlingsspråk måste kompileras eller tolkas

Mycket tidigt insåg man att det behövdes lättare att skriva språk och att själva datorn kunde användas för att översätta dem till maskinkodinstruktioner som datorn faktiskt kan förstå. Det fanns två tillvägagångssätt som kunde tas med denna översättning och båda alternativen valdes (antingen det ena eller det andra kommer att användas beroende på vilket språk som används och var den körs).

Ett sammanställt språk är ett språk där när programmet har skrivits matar du koden genom ett program som kallas en kompilator och som producerar en maskinkodversion av programmet. När du vill köra programmet så kallar du bara maskinkodversionen. Om du gör ändringar i programmet måste du kompilera det igen innan du kan testa den ändrade koden.

Ett tolkat språk är ett där instruktionerna konverteras från det du har skrivit till maskinkod när programmet körs. Ett tolkat språk får i princip en instruktion från programkällan, konverterar den till maskinkod, kör den maskinkoden och tar sedan nästa instruktion från källan för att upprepa processen.

Två varianter på sammanställning och tolkning

En variant använder en tvåstegsprocess. Med denna variant kompileras ditt program inte direkt till maskinkoden utan konverteras istället till ett monteringsliknande språk som fortfarande är oberoende av den specifika processorn. När du vill köra koden behandlar den den kompilerade koden genom en tolk som är specifik för processorn så att maskinkoden passar den processorn. Detta tillvägagångssätt har många av fördelarna med att sammanställa samtidigt som processorns oberoende bibehålls, eftersom samma sammanställda kod kan tolkas av många olika processorer. Java är ett språk som ofta använder den här varianten.

Den andra varianten kallas en Just in Time-kompilator (eller JIT). Med den här metoden kör du faktiskt inte kompilatorn efter att du har skrivit din kod. Istället sker det automatiskt när du kör koden. Med hjälp av en Just in Time-kompilator tolkas inte koden uttalande efter uttalande, den sammanställs allt på en gång varje gång det kallas att köras och sedan är den kompilerade versionen som den just skapade det som körs. Detta tillvägagångssätt gör att det ser mycket ut som att koden tolkas förutom att istället för att fel bara hittas när uttalandet med felet uppnås, resulterar alla fel som upptäcks av kompilatorn i att ingen av koden körs i stället för hela koden fram till den punkten som körs. PHP är ett exempel på ett språk som vanligtvis bara används i tidssammanställning.

Är JavaScript kompilerat eller tolkat?

Så nu vet vi vad tolkad kod och kompilerad kod betyder. Frågan vi nästa måste svara är vad har allt detta att göra med JavaScript? Beroende på exakt var du kör din JavaScript kan koden sammanställas eller tolkas eller använda någon av de två andra varianterna som nämns. För det mesta kör du JavaScript i en webbläsare och där tolkas vanligtvis JavaScript.

Tolkade språk är vanligtvis långsammare än sammanställda språk. Det finns två skäl till detta. Först måste koden som ska tolkas faktiskt tolkas innan den kan köras och för det andra måste det hända varje gång uttalandet ska köras (inte bara varje gång du kör JavaScript men om det är i en slinga så är det måste göras varje gång runt slingan). Detta innebär att kod som skrivs i JavaScript kommer att gå långsammare än kod som skrivs på många andra språk.

Hur kan kunskap om detta hjälpa oss där JavaScript är det enda språket som finns tillgängligt för alla webbläsare? Den JavaScript-tolkaren som är inbyggd i webbläsaren är inte skriven i JavaScript. Istället är det skrivet på något annat språk som sedan sammanställdes. Vad detta betyder är att du kan få din JavaScript att köra snabbare om du kan dra nytta av alla kommandon som JavaScript tillhandahåller som gör att du kan ladda ner uppgiften till JavaScript-motoren själv.

Exempel för att få JavaScript att köra snabbare

Ett exempel på detta är att vissa men inte alla webbläsare har implementerat en document.getElementsByClassName () -metod i JavaScript-motorn medan andra ännu inte har gjort det. När vi behöver den här funktionen kan vi göra att koden körs snabbare i de webbläsare där JavaScript-motorn tillhandahåller den genom att använda funktionsavkänning för att se om metoden redan finns och bara skapa vår egen version av den koden i JavaScript när JavaScript-motorn inte gör det. t ge det åt oss. Där JavaScript-motorn tillhandahåller den funktionen bör den köra snabbare om vi använder den snarare än att köra vår egen version skriven i JavaScript. Detsamma gäller för alla behandlingar som JavaScript-motorn gör att vi kan ringa direkt.

Det kommer också att finnas fall där JavaScript ger flera sätt att göra samma begäran. I dessa fall kan ett av sätten att få tillgång till informationen vara mer specifikt än det andra. Till exempel document.getElementsByTagName ('tabell') [0] .tBodies och document.getElementsByTagName ('tabell') [0] .getElementsByTagName ('tbody') båda hämtar samma nodelist av tbody-taggarna i den första tabellen på webben sida men det första av dessa är ett specifikt kommando för att hämta tbody-taggarna där den andra identifierar att vi hämtar tbody-taggar i en parameter och andra värden kan ersättas för att hämta andra taggar. I de flesta webbläsare kommer den kortare och mer specifika varianten av koden att köras snabbare (i vissa fall mycket snabbare) än den andra varianten, så det är vettigt att använda den kortare och mer specifika versionen. Det gör också koden lättare att läsa och underhålla.

I många av dessa fall kommer den faktiska skillnaden i behandlingstiden att vara väldigt liten och det kommer bara att vara när du lägger till många sådana kodval tillsammans att du får någon märkbar skillnad i den tid din kod tar att köra. Det är ganska sällsynt men att ändra din kod för att få den att gå snabbare kommer att göra koden betydligt längre eller svårare att underhålla, och ofta kommer det omvända att vara sant. Det finns också den extra fördelen att framtida versioner av JavaScript-motorer kan skapas som påskyndar den mer specifika varianten ytterligare så att användningen av den specifika varianten kan innebära att din kod kommer att köras snabbare i framtiden utan att du behöver ändra något.