Двигатели JavaScript используют компилятор JIT (точно в срок) для выполнения кода.
Я знаю, вам должно быть интересно, что, черт возьми, такое JIT и как оно работает?
давайте разберемся с JIT
Но прежде чем разбираться в JIT, давайте ненадолго изменим тему и попытаемся понять, что такое компилятор и интерпретатор и как они работают?
Компилятор
Исходный код преобразуется в машинный код один раз, а затем выполняется.
Плюсы
- Допустим, у нас есть цикл, который выполняется 40 раз, нам не нужно снова и снова переводить один и тот же код. Время, которое он экономит, огромно.
- Преобразованный код будет более эффективным, потому что у нас будет больше времени на оптимизацию.
Минусы
- Для запуска требуется немного больше времени, потому что он должен пройти этот этап компиляции в начале.
Переводчик
Переводчики работают быстро. Нам не нужно проходить весь этот этап компиляции перед выполнением. Он просто начинает переводить первую строку, а затем выполняет ее.
Плюсы
- Быстрое время запуска характерно для интерпретаторов. Вот почему браузеры вначале использовали интерпретаторы JavaScript.
Минусы
- Когда вы запускаете один и тот же код более одного раза. Например, если вы находитесь в петле. Тогда вам придется делать один и тот же перевод снова и снова.
- Код будет менее эффективен, чем компилятор, потому что у нас будет меньше времени на оптимизацию.
Точный компилятор (JIT)
Чтобы избавиться от неэффективности интерпретатора, «интерпретатор продолжает повторно переводить один и тот же код каждый раз, когда он проходит через цикл».
В компиляторе JIT у нас есть новый компонент, называемый монитором (он же профайлер). Этот монитор наблюдает за выполнением кода и
- Определите горячие или теплые компоненты кода, например: повторяющийся код.
- Преобразуйте эти компоненты в машинный код во время выполнения.
- Оптимизируйте сгенерированный машинный код.
- Горячая замена предыдущей реализации кода.
Короче говоря, компилятор Just in time - это не что иное, как комбинация интерпретатора и компилятора.
Я надеюсь, что вы нашли его полезным, и если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать.
С гордостью поправьте меня, если я ошибаюсь:)