Если мы хотим, чтобы машина выполняла работу, то как мы можем приказать машине выполнить эту работу?

например, я хочу добавить 2 числа, поэтому я напишу функцию javascript для добавления 2 чисел и попрошу машину запустить ее и дать нам результат, но машина ничего не понимает, кроме машинного языка.

Итак, здесь нам нужно что-то, чтобы мы могли преобразовать наш код javascript в машинный язык, и машина это поймет и сможет сделать работу за нас.

Первым шагом является лексический анализ, который разбивает код на токены, чтобы определить их значение, чтобы он мог определить, что делать.

И этот токен передается чему-то под названием AST (абстрактное синтаксическое дерево) и формирует древовидную структуру ключевых слов из javascript.

Как вы можете видеть на изображении выше, как js слева преобразуется в древовидную структуру.

Эта древовидная структура, созданная AST, поступает в интерпретатор, и этот интерпретатор создаст байтовый код, как показано на 1-м рис.

Теперь, как вы знаете, байт-код не такой низкий уровень, как машинный код, но движок javascript может понимать байт-код и запускать нашу программу, как ожидалось. Но это первый шаг.

На рис.1 есть что-то, что является профилировщиком.

Profiler отслеживает наш код во время его выполнения и делает заметки о том, как мы можем оптимизировать этот код.

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

Таким образом, скорость выполнения javascript увеличится.

Теперь, когда мы знаем, как работает JS Engine, мы можем написать более оптимизированный код для повышения скорости выполнения javascript.

Спасибо за чтение!