Javascript Engine

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

JavaScript всегда размещается в некоторой среде, и чаще всего это браузер, такой как Google Chrome, Firefox, Safari. Итак, что происходит, так это то, что на хосте, на котором размещен JavaScript, есть какой-то механизм JavaScript, который берет наш код и выполняет его.

Вот почему так важен движок JavaScript (JS). Движок JavaScript - это компьютерный язык, на котором выполняется JS-код.

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

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

Есть несколько движков JavaScript. Первый движок JavaScript был создан Бренданом Эйхом в 1995 году для Netscape Navigator. Он превратился в движок SpiderMonkey, который до сих пор используется в браузере Firefox. Другими известными движками являются Chakra, движок JavaScript в браузере Internet Explorer и JavaScriptCore, а также движок Apple для своего браузера Safari. .

V8 - это первый современный движок JavaScript, созданный Google.

Двигатель V8 является самым популярным и, по мнению некоторых, самым быстрым механизмом JavaScript.

До создания V8 большинство браузеров использовали очень простые движки, и из-за этого JavaScript работал медленно. Когда Google решил создать свой браузер, возникла необходимость в том, чтобы JavaScript работал как можно быстрее в браузере сервера или на любом компьютере.

2 сентября 2008 года первая версия движка V8 была выпущена одновременно с первой версией Chrome.

Хорошо, круто ... но что находится внутри этого волшебного движка, который понимает JavaScript и позволяет компьютеру читать наш код?
Если вы действительно хотите знать, как работает движок JavaScript, вам нужно четко понимать две важные концепции: интерпретатор и компилятор.

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

компилятор - это также компьютерная программа, которая преобразует язык программирования в язык, понятный компьютеру, но не переводит на лету. Сначала он пытается понять, что мы хотим сделать, и меняет весь наш код на что-то еще, называемое языком более низкого уровня (например, машинным языком), чтобы компьютер мог понять.

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

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

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

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

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

Итак ... какой из них лучше? Что ж, есть способ получить лучшее из обоих миров, и вместо использования компилятора или интерпретатора вы можете объединить эти два и использовать так называемую своевременную компиляцию, также известную как JIT-компиляция.

Все современные движки используют JIT-компиляцию для повышения производительности.

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

Двигатель V8

  • Первое, что происходит внутри движка, - это то, что наш код анализируется парсером, который в основном считывает наш код построчно и проверяет правильность синтаксиса кода, который мы ему дали. В ходе этого лексического анализа код разбивается на так называемые токены, чтобы определить их значение.
  • Если все верно, синтаксический анализатор использует эти токены для создания структуры данных, известной как абстрактное синтаксическое дерево. Это позволяет движку понять, как вещи структурированы в нашем коде.

  • Затем код сначала отправляется нашему интерпретатору (интерпретатор V8 называется ignition), который использует это абстрактное синтаксическое дерево для создания байт-кода.
  • Байт-код - это абстракция машинного кода. Это не такой низкий уровень, как машинный код, но это код, который может интерпретироваться движком JavaScript.
  • Тем временем профилировщик пытается понять, как мы можем передать часть этого байт-кода в компилятор для его оптимизации.
  • Части кода, которые можно оптимизировать, отправляются в компилятор (компилятор V8 называется TurboFan).
  • Компилятор выполняет оптимизацию, поэтому наш код работает быстрее, а затем заменяет эти части кода оптимизированным машинным кодом.
  • Таким образом, интерпретатор позволяет нам запускать код сразу, а компилятор и профилировщик позволяют нам оптимизировать этот код во время его выполнения. Это своевременная компиляция.

Выводы

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

использованная литература

Https://v8.dev/