Значение на тълкуван или компилиран в JavaScript

click fraud protection

Компютрите всъщност не могат да изпълняват кода, който пишете JavaScript (или всеки друг език по този въпрос). Компютрите могат да изпълняват само машинен код. Машинният код, който може да работи определен компютър, е определен в процесора, който ще изпълнява тези команди и може да бъде различен за различните процесори.

Очевидно е, че машинен код за писане беше трудно за хората (125 е команда за добавяне или е 126 или може би 27). За да заобиколите този проблем бяха създадени онези, които са известни като езици за сглобяване. Тези езици използваха по-очевидни имена за командите (като ADD за добавяне) и така премахнаха необходимостта да запомнят точните машинни кодове. Езиковете за сглобяване все още имат връзка едно към едно с конкретния процесор и машинен код, в които компютърът преобразува тези команди.

Езиците на монтажа трябва да бъдат съставени или тълкувани

Много рано се разбра, че е по-лесно да се пише езици са били необходими и че самият компютър може да се използва за превеждане на тези в инструкциите за машинен код, които компютърът всъщност може да разбере. Имаше два подхода, които могат да се използват с този превод и бяха избрани и двете алтернативи (един или друг ще се използва в зависимост от езика, който се използва и къде се изпълнява).

instagram viewer

Компилираният език е този, където след като програмата е написана, вие подавате кода чрез програма, наречена a съставител и това създава машинен код на програмата. Когато искате да стартирате програмата, просто се обаждате на версията на машинен код. Ако направите промени в програмата, трябва да я прекомпилирате, преди да можете да тествате променения код.

Интерпретиран език е езикът, при който инструкциите се преобразуват от написаното от вас в машинен код, докато програмата се изпълнява. Интерпретираният език по принцип получава инструкция от програмния източник, преобразува го в машинен код, изпълнява този машинен код и след това хваща следващата инструкция от източника, за да повтори процес.

Два варианта за съставяне и тълкуване

Един вариант използва двуетапен процес. При този вариант източникът на вашата програма се компилира не директно в машинния код, но вместо това се преобразува в език, подобен на монтажа, който все още е независим от конкретния процесор. Когато искате да стартирате кода, той обработва компилирания код чрез интерпретатор, специфичен за процесора, така че да получи машинен код, подходящ за този процесор. Този подход има много от предимствата на компилирането, като същевременно поддържа независимостта на процесора, тъй като един и същ компилиран код може да бъде интерпретиран от много различни процесори. Java е един език, който често използва този вариант.

Другият вариант се нарича Just in Time компилатор (или JIT). При този подход всъщност не стартирате компилатора, след като сте написали своя код. Вместо това това се случва автоматично, когато стартирате кода. С помощта на компилатора Just in Time кодът не се интерпретира изявление по оператор, а се компилира всичко в едно отидете всеки път, когато е извикан да бъде стартиран и тогава компилираната версия, която току-що е създала, е това, което получава се изпълнява. Този подход го прилича много на това, че кодът се интерпретира, с изключение на това, че вместо грешки се откриват само когато операторът с грешка е достигната, всички грешки, открити от компилатора, водят до това, че никой от кода не се изпълнява вместо целият код до този момент е се изпълнява. PHP е пример за език, който обикновено използва точно във времето компилация.

JavaScript компилиран ли е или се тълкува?

Така че сега знаем какво означава интерпретиран код и компилиран код, въпросът, на който следва да отговорим, е какво общо има всичко това с JavaScript? В зависимост от това къде точно стартирате вашия JavaScript, кодът може да бъде компилиран или интерпретиран или да използва някой от другите два споменати варианта. През повечето време стестартиране на вашия JavaScript в уеб браузър и там JavaScript обикновено се тълкува.

Тълкуваните езици обикновено са по-бавни от компилираните. Има две причини за това. Първо, кодът, който трябва да бъде интерпретиран, всъщност трябва да бъде интерпретиран, преди да може да бъде стартиран и второ, който има да се случва всеки път, когато операторът трябва да се стартира (не само всеки път, когато стартирате JavaScript, но ако той е в а контур тогава трябва да се прави всеки път около контура). Това означава, че кодът, написан на JavaScript, ще работи по-бавно, отколкото кодът, написан на много други езици.

Как знанието за това ни помага, когато JavaScript е единственият достъпен за нас език за работа с всички уеб браузъри? Самият JavaScript преводач, който е вграден в уеб браузъра, не е написан на JavaScript. Вместо това тя е написана на някакъв друг език, който тогава е бил съставен. Това означава, че можете да накарате JavaScript да работи по-бързо, ако можете да се възползвате от всякакви команди, които JavaScript предоставя, които ви позволяват да зареждате задачата към самия двигател на JavaScript.

Примери за получаване на JavaScript за по-бързо стартиране

Пример за това е, че някои, но не всички браузъри са въвели методът document.getElementsByClassName () в двигателя на JavaScript, докато други все още не го правят. Когато имаме нужда от тази специфична функционалност, можем да направим код да работи по-бързо в онези браузъри, където JavaScript двигателят го предоставя чрез функция проучване дали методът вече съществува и създаваме само собствена версия на този код в JavaScript, когато JavaScript двигателят не го предоставя нас. В случаите, когато двигателят на JavaScript предоставя тази функционалност, той трябва да работи по-бързо, ако използваме тази версия, вместо да използваме собствена версия, написана на JavaScript. Същото се отнася за всяка обработка, която JavaScript двигателят ни предоставя за директно обаждане.

Ще има и случаи, когато JavaScript предоставя множество начини за отправяне на една и съща заявка. В тези случаи един от начините за достъп до информацията може да бъде по-специфичен от другия. Например document.getElementsByTagName ("таблица") [0] .tBodies и document.getElementsByTagName ("таблица") [0] .getElementsByTagName ("tbody") и двете извличане на същия ноделист от таговете tbody в първата таблица на уеб страницата, но първата от тях е специфична команда за извличане tbody тагове, където вторият идентифицира, че ние извличаме tbody маркери в параметър и други стойности могат да бъдат заменени, за да извлечем други тагове. В повечето браузъри по-късият и по-специфичен вариант на кода ще работи по-бързо (в някои случаи много по-бърз) от втория вариант и затова има смисъл да се използва по-късата и по-специфична версия. Освен това прави кода по-лесен за четене и поддържане.

Сега в много от тези случаи действителната разлика във времето за обработка ще бъде много малка и ще стане едва когато добавяте много такива избори на код заедно, че ще получите забележима разлика във времето, за което кода ви отнема се изпълнява. Доста рядко е обаче, че промяната на кода, за да го ускори, ще направи кода значително по-дълъг или по-труден за поддържане и често обратното ще бъде вярно. Има и допълнителното предимство, че могат да бъдат създадени бъдещи версии на JavaScript двигатели, които дори ускоряват по-конкретния вариант освен това използването на конкретния вариант може да означава, че вашият код ще работи по-бързо в бъдеще, без да се налага да променяте нищо.

instagram story viewer