Top.Mail.Ru

Интерпретатор JavaScript, как часть движка JS

Интерпретатор JavaScript (JS), если простыми простыми словами — это некая программа, которая преобразует код JS в машиночитаемый язык. Но важно не путать его с компилятором JS. Потому что разница возможно не очевидна сразу, но она есть. Интерпретатор JS — считывает заданный код построчно и по порядку и тут же начинает его «выполнять». Компилятор же вначале «считывает» весь код, потом проводит с ним оптимизацию, затем только воспроизводит уже оптимизированный код.

“Движок” JavaScript — это программа объединяющая в себе интерпретатор JS и компилятор. Именно внутри этих “движков” код JS преобразуется в код более «простого» уровня. Разрабатывая программы на языке JavaScript, мы преследуем идею, что компьютер (или возможно просто браузер) обязательно выполнял ее правильно. Но компьютер может выполнить и понять только «машинный» код.Движок” как раз переводит наш код JS на «машинный».

Объясняем работу движка JS на пальцах

С любым JavaScript кодом, поступившим внутрь “движка”, должны произойти ряд определенные этапы работы, прежде чем он отразиться «console.log». Давайте с этим разбираться подробнее что именно должно с ним произойти

Парсер

Первый этап работы с кодом – это парсер. На этом этапе код «разбивается» на небольшие логические части(токены). Это делается для того, чтобы потом понять назначение этих токенов и что дальше с ними делать.

AST (Abstract Syntax Tree).Абстрактное синтаксическое древо

В результате полученных на первом этапе токенов создается некое «представление» кода. Оно имеет структуру “дерева” и отсюда берет свое название.

Интерпретатор JS

Интерпретатор JavaScript считывает код файла по каждой строке отдельно и поочередно. При этом сразу он этот код анализирует и преобразовывает, прямо в течение “работы” самой программы и не останавливает ее выполнение. Основываясь на уже имеющемся AST, интерпретатор создает байт-код. На данном этапе никакой оптимизации не производится.

Профайлер

Этот этап проводит проверку кода. Именно на этом этапе осуществляется специальный контроль за ходом выполнения кода, но с целью обратить внимание на возможности его оптимизации. Далее, ту часть кода, которую возможно оптимизировать, профайлер передает компилятору на оптимизацию. Который в свою очередь компилирует и оптимизирует код, делая его работу быстрее.

Компилятор JavaScript

Компилятор JS в основной своей задаче определяет, какую функцию выполняет полученный для оптимизации код. Потом он из этого кода создает уже оптимизированный код, который работает быстрее, но выполняет ту же функцию что и раньше.

Деоптимизация

По сути компилятор создает лишь «предположение», что полученный код после оптимизации код будет работать лучше и быстрее. Но если вдруг такое «предположение» окажется не верным, то на этом этапе оптимизированный код будет деоптимизирован.

Движок JS. Немного истории

В раннюю эпоху расцвета интернета и браузерной борьбы за пользователей, большинство разработчиков браузеров внедряли лишь интерпретатор JavaScript. Тогда это было обосновано. Ведь интерпретатор проводит выполнение любой программы построчно, по мере того как как сам код в него поступает. А из этого следует его главное достоинство — это быстродействие кода. Потому что в этом случае любая поступающая команда в виде кода выполнялась просто мгновенно. И появлялся эффект «быстродействия» браузера.

Однако развитие интернета не стоит на месте — технологии тоже усложняются. Программы становятся тяжелее, требования становятся более жесткими, код становился более тяжелым. Поэтому тут стал заметен и главный недостаток чистого интерпретатора — любому интерпретатору приходится проделывать одну и ту же работу по несколько раз, если используется одинаковый код. То есть нужно было к примеру «считать» цикл, то интерпретатору приходилось построчно анализировать одни и те же строки кода итак много раз подряд. А это лишняя работа и лишнее время.

Так и появился на свет движок JavaScript, который по сути совмещает в себе лучшее от двух подходов : от компилятора JS и интерпретатора JS.

Возможно вам будет интересно почитать о том как происходит отладка JavaScript в Firefox

Text.ru - 100.00%

Поделись статьей с друзьями!

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *