Движок(engine) javaScript
- это программа, которая выполняет код javaScript
. У каждого браузера свой javaScript
движок.
js
движок - это V8
в google chrome
. При помощи этого движка так же работает и node js
.node js
можно создавать приложения на js
которые работают вне браузера.Каждый js
движок имеет стек вызовов(call stack
) и кучу(heap
).
Компьютер может понимать только набор нулей и единиц, поэтому, любая программа в итоге должна быть трансформирована в машинный код. Это можно сделать при помощи компиляции, либо при помощи интерпретации.
Javascript
- Это интерпретируемый язык, но в современных реалиях не совсем.
JIT (Just-In-Time)
- это компиляция которая используется для оптимизации работы javascript
. Так как интерпретация javascript
довольно медленный способ выполнения кода.
Но устаревшие версии браузеров не использют JIT
. Это например - Internet Explorer
, такие как IE6
, IE7
и IE8
, а также устаревшие версии Firefox
, Safari
и Chrome
.
JIT
позволяет компилировать код в машинный код во время выполнения программы, а не заранее.Когда запускается код javascript
, он сначала анализируется парсером и преобразуется в абстрактное синтаксическое дерево (AST
). Затем интерпретатор преобразует AST
в байт код и оптимизирует его.Затем Байт код компилируется в машинный код компилятором и выполняется. Процесс преобразования AST
в байт код и оптимизации может повторяться. Такой метод работы значительно улучшает скорость выполнения программы, потому что код выполняется немедленно, а затем постепенно оптимизируется по мере необходимости.
AST
.JIT
используется для оптимизации, перед компиляцией в машинный код.AST
(Abstract Syntax Tree) - Наш код разбивается на смысловые кусочки и сохраняется в дереве в структурированном виде. Это представление нашего кода внутри движка js
.Здесь я вам рекомендую прочитать статью: Знай свой JIT: ближе к машине. Тут вы подробно узнаете о том как работает JIT
.
Кстати вот как выглядит например переменная ввиде AST
. Ну это так, вдруг вам интересно стало))
const anime = 'hello';
Среда выполнения(в браузере) - это окружение которое содержит в себе нужные компоненты необходимые для использования javaScript
.
runtime
это сам движок js
.Web API
. setTimeout например и так далее - это функциональность предоставляемая движку, доступная в объекте window. Сама эта функциональность не является частью js
.runtime
имеет callback queue(колбек очередь) - Это структура данных которая содрежит все callback
функции готовые к выполнению.event loop
(цикл событий) - Помещает из колбек очереди функции в стек вызовов. Когда происходит событие, например клик мыши, то колбек функция попадает в очередь колбеков (callback queue)
. После этого, когда стек вызовов очищается, то эта колбек функция передается в стек вызовов, что бы выполниться.