Подобно тому, как двигатели приводят в действие автомобили, существуют двигатели, которые приводят в действие код, читая и затем выполняя его. В этой статье я расскажу, что происходит, когда код встречается с движком JavaScript V8.
Движок JavaScript V8
Как прямо заявило FreecodeCamp, движок JavaScript выполняет и компилирует JavaScript в собственный машинный код. Каждый крупный браузер разработал свой собственный JS-движок: Google Chrome использует V8, Safari использует JavaScriptCore, а Firefox использует SpiderMonkey. Мы будем особенно работать с V8, поскольку он используется в Node.js и Electron, но другие движки построены таким же образом.
У Freecodecamp есть игровая площадка со списком зеркал V8 на GitHub.
Как разбивается код
Движок JavaScript V8 загружает исходный код, затем код поступает на этап синтаксического анализа, который состоит из анализатора и сканера. Сканер преобразует код в токены, а анализатор создает абстрактное синтаксическое дерево (AST) (показано на снимке экрана ниже).
Поскольку JavaScript является динамически типизированным языком, он использует JIT-компиляцию, сочетающую интерпретацию и компиляцию.
Интерпретация берет AST из парсера и переводит его в байт-код, а компилятор преобразует весь исходный код в машинный код.
Двигатель будет продолжать работать до тех пор, пока код не будет завершен.
В заключение,
Движок JavaScript — это программа, которая преобразует ваш JavaScript в машинный код и выполняет результат на центральном процессоре компьютера (ЦП), написанная Владом Остренко.
Что нового вы узнали? Не стесняйтесь поделиться этим ниже.
Ресурсы и дополнительная информация о двигателе V8/что происходит под капотом:
FreecodeCamp: https://www.freecodecamp.org/news/javascript-under-the-hood-v8/
Блог Инанка: https://dev.to/inancakduvan/let-me-understand-how-javascript-works-under-the-hood-3ibf
Плейлист Под капотом Traversy Media: https://www.youtube.com/playlist?list=PLillGF-Rfqbars4vKNtpcWVDUpVOVTlgB
Блог Мано: https://blog.bitsrc.io/javascript-under-the-hood-632ccae06b27
Разница между машинным кодом и байт-кодом: https://pediaa.com/what-is-the-difference-between-machine-code-and-bytecode/
Блог Дивьеша: https://javascript.plainenglish.io/a-beginners-guide-to-javascript-under-the-hood-bc60fc352163