Firefox 70 прибудет с улучшенным интерпретатором Javascript

Firefox 70

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

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

Чтобы достичь этой цели, Mozilla объясняет, что В современных движках JavaScript каждая функция изначально выполняется в интерпретаторе кода.

Часто вызываемые функции компилируются в машинный код. Это называется JIT-компиляцией или компиляцией на лету. Относительно Firefox также включает интерпретатор кода JavaScript, написанный на C ++, и различные уровни JIT-компиляции.

Во-первых, у нас есть базовый JIT-компилятор, который компилирует каждый оператор байт-кода непосредственно в небольшой фрагмент машинного кода, используя встроенное кэширование как для производительности, так и для сбора информации для JIT-компилятора под названием IonMonkey или Ion.

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

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

Хотя этот процесс интерпретации кода JavaScript до сих пор работал достаточно хорошо, команда Firefox объясняет, что столкнулся с некоторыми проблемами с первым часть состоит из интерпретатора C ++ и базового JIT-компилятора.

Firefox 70

В самом деле, некоторые современные веб-приложения например, Google Docs или Gmail запустить столько JavaScript, что компилятор база и даже JIT-компилятор они могли потратить много времени, пытаясь скомпилировать тысячи функций.

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

Чтобы решить эти проблемы, специалисты Mozilla комментируют, что:

Базовый интерпретатор находится между интерпретатором C ++ и базовым JIT-компилятором и содержит элементы обоих уровней.

Выполняет все операторы байт-кода с фиксированным циклом интерпретатора (например, интерпретатор C ++) и использует методы встроенного кэширования для повышения производительности и сбора информации о типах (как это делает базовый JIT).

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

Кроме того, поскольку Разработчики Firefox хотели, чтобы базовый интерпретатор использовал точно такие же онлайн-кеши. и та же информация, что и JIT, была добавлена ​​новая структура данных под названием JitScript.

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

В этих новых реализациях основные данные компилятора функции теперь находятся только в машинном коде. Оттуда вся кэшированная информация и данные профилирования были перемещены в JitScript.

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

Для этого был создан базовый класс BaselineCodeGen с двумя другими производными классами. Базовый компилятор использует первый класс BalineCompiler для компиляции байт-кода скрипта в машинный код.

Второй класс BaselineInterpreterGenerator используется для генерации кода для базового интерпретатора. А с помощью класса BaselineInterpreterGenerator команде Firefox удалось создать базовый интерпретатор.

источник: https://hacks.mozilla.org/


Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.