• Js Engine – это компьютерная программа, которая выполняет код js. У каждого браузера свой движок js. но самый мощный движок — это движок Google V8, движок V8 поддерживает Google Chrome, а также node.js, который является средой выполнения javaScript.
  • Любой движок javaScript содержит стек вызовов и кучу. Стек вызовов — это место, где наш код выполняется с использованием контекста выполнения. Куча — это неструктурированный пул памяти, в котором хранятся все объекты, необходимые нашей памяти.

  • в механизме Java Script при вводе фрагмента кода он сначала анализируется или считывается в структуру данных, называемую абстрактным синтаксическим деревом AST. это работает путем разделения каждой строки кода на части, которые имеют смысл для языка, а затем сохранения этих частей в виде дерева или в структурированном виде.
  • На этом шаге также проверяется наличие синтаксических ошибок, и полученное дерево позже будет использоваться для генерации машинного кода.
  • На этом шаге также проверяется наличие синтаксических ошибок, и полученное дерево позже будет использоваться для генерации машинного кода.
  • Следующий шаг — компиляция: сгенерированный AST преобразуется в машинный код. Этот машинный код выполняется немедленно, потому что современный движок javaScript использует JIT-компиляцию. и выполнение происходит в стеке вызовов движков.
  • Современные движки JavaScript на самом деле имеют довольно умные стратегии оптимизации. что они делают, так это создают неоптимизированную версию машинного кода в начале. чтобы он мог начать выполняться как можно быстрее.

  • Затем в фоновом режиме код оптимизируется и перекомпилируется во время уже запущенного процесса. и это можно сделать в большинстве случаев, и после каждой оптимизации неоптимизированный код просто сметается новым оптимизированным кодом без остановки выполнения.
  • Этот процесс делает современные механизмы JavaScript, такие как V8 от Google, такими быстрыми. и вся эта синтаксическая компиляция и оптимизация происходят в специальных потоках внутри движка, к которым мы не можем получить доступ из нашего кода.