Давайте поймем важность 𝐉𝐮𝐬𝐭-𝐢𝐧-𝐓𝐢𝐦𝐞 𝐂𝐨𝐦𝐩𝐢𝐥𝐞𝐫 (𝐉𝐈𝐓) в JS.

Как мы знаем, в программировании есть два способа перевода: компилятор и интерпретатор. У каждого из этих способов обработки перевода есть свои плюсы и минусы.
Интерпретатор по сравнению с компилятором имеет возможность быстро приступить к работе, что делает его быстрее.
Но компромисс интерпретатора JavaScript заключался в том, чтобы интерпретировать код снова и снова в случае зацикливания.

Чтобы получить лучшее из обоих миров, браузер смешал компиляторы и добавил новую часть в движок JS под названием 𝐦𝐨𝐧𝐢𝐭𝐨𝐫 или 𝐩𝐫𝐨𝐟𝐢𝐥𝐞𝐫.

Что монитор делает, так это то, что он полностью наблюдает за кодом во время его выполнения. Он отслеживает такие вещи, как частота выполнения функции. В случае повторяющихся функций эта функция считается 𝐰𝐚𝐫𝐦𝐬. Затем эту подогретую функцию вытащите из 𝐛𝐚𝐬𝐞𝐥𝐢𝐧𝐞 𝐜𝐨𝐦𝐩𝐢𝐥𝐞𝐫, чтобы создать ее скомпилированную версию.

Базовый компилятор будет делать это по частям. Каждая операция в функции компилируется в одну или несколько 𝐬𝐭𝐮𝐛𝐛𝐬. Stubb будет специфичен для любых типов, которые используются по обе стороны от этого оператора и сохраняются. В случае повторной операции с одним и тем же оператором и одним и тем же типом любой стороны оператора вместо повторного чтения блока кода будет использоваться сохраненная заглушка. Это сэкономит время на перевод и поможет ускорить работу.

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

В случае очень горячей функции монитор отправляет эту функцию в 𝐨𝐩𝐭𝐢𝐦𝐢z𝐢𝐧𝐠 𝐜𝐨𝐦𝐩𝐢𝐥𝐞𝐫, и это создаст более быструю версию этой функции. Оптимизирующий компилятор делает предположения. Например: если оптимизирующий компилятор предполагает, что все объекты, созданные конкретным конструктором, имеют одинаковую форму, поэтому объект имеет одинаковые имена свойств и они были добавлены в одном и том же порядке. Таким образом, оптимизирующий компилятор использует информацию, которую собирает монитор, чтобы делать такие суждения, и если что-то было верным в прошлом кода, он продолжает считать это верным.

Скомпилированный код необходимо проверить, и если это не так, JIT воспримет это как неверное предположение и сбросит оптимизированный код. В этот момент он возвращается к скомпилированной версии и выполняет 𝐫𝐞-𝐨𝐩𝐭𝐢𝐦𝐢𝐳𝐢𝐧𝐠.

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

Это JIT в двух словах. Спасибо, что дочитали до конца. Это мой первый блог, и я буду искать больше блогов в будущем.

#интернет #программирование #javascript #обучение