Хорошо, ребята, поскольку вы пришли сюда, я уверен, что вы также могли слышать термин «движок javascript» или слышали такие классные слова, как V8, паукообразная обезьяна и чакра. Что ж, если эти слова или эти термины пугают вас, не бойтесь, мои друзья, сегодня я буду объяснять очень просто, что такое движок javascript, а также объясню, как знаменитый движок js V8 из chrome работает.

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

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

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

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

Поэтому в 2002 году некоторые инженеры подумали, почему бы не использовать хорошие возможности как компилятора, так и интерпретатора, и создали компилятор JIT (Just in time). давайте разберемся, как Chromes v8 использует Jit для оптимизации нашего кода.

Как мы видим выше, мы анализируем код js и превращаем его в AST (абстрактное синтаксическое дерево). затем этот Ast сначала отправляется к интерпретатору, интерпретатор берет этот Ast и выдает байт-код, который затем интерпретируется нашим движком и превращается в машинный код. но есть также вещь, называемая монитор или профилировщик, которая постоянно наблюдает за нашим кодом во время его выполнения и видит, сколько раз выполняется наш код, какие переменные мы используем, как мы можем оптимизировать этот код. так как наш код работает, если профилировщик видит, что какой-то код выполняется несколько раз, он передает этот код компилятору и говорит: «Эй, вот какой-то код, может быть, мы можем оптимизировать этот код и компилятор на ходу, пока наше Приложение работает, компилирует и изменяет код и заменяет разделы байтового кода оптимизированным машинным кодом. так что с этого момента вместо более медленного байтового кода следует использовать оптимизированный машинный код. он смешивает и сопоставляет вещи, и он постоянно проходит через этот цикл. это означает, что скорость переданного нами js-кода будет улучшаться на ходу, потому что компилятор и профилировщик будут вносить изменения в байтовый код с оптимизированным машинным кодом.

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

вот и все, ребята, теперь вы знаете, как движок js в браузерах запускает код, есть еще много вещей, которые происходят, когда программа js работает, но не волнуйтесь в моих следующих блогах, я буду объяснять все вещи. дайте мне несколько хлопков, если вам понравился блог. а пока до свидания... :)