Игра Яндекс Практикума
Игра Яндекс Практикума
Игра Яндекс Практикума

Firefox 58 будет оснащен новым двухуровневым компилятором

Новости

Выход новой версии популярного браузера запланирован на 23 января.

2К открытий2К показов

Создатели Mozilla Firefox сообщили о внедрении компилятора нового типа в 58 версию популярного браузера. Двухуровневая структура инструмента позволяет добиться ускорения в 10 — 15 раз по сравнению с обычным оптимизирующим компилятором.

На ПК за секунду можно скомпилировать 30 — 60 Мб кода WebAssembly, а на мобильном устройстве — около 8 Мб. Это выше пропускной способности многих сетей. Во избежание задержек в новой версии Firefox встроена возможность компиляции кода по мере его загрузки. Таким образом, загруженный код практически сразу готов к использованию.

 

Зачем это нужно?

Потребность в новой технологии компиляции появилась с созданием WebAssembly. Операция декодирования при использовании этого формата менее ресурсоемка, чем парсинг привычного для браузеров кода на JavaScript. Несмотря на то, что парсинг JS осуществляется в параллельном потоке, и к моменту полной загрузки все инструкции подготовлены к компиляции, этот процесс начинается только по завершении загрузки.

Firefox 58 будет оснащен новым двухуровневым компилятором 2

А с WebAssembly проблем меньше. Декодирование и компиляция в новой технологии разбираются на несколько потоков, что позволяет компилятору начать свою работу в главном из них. Это увеличивает скорость обработки, так как на нее не требуется дополнительной задержки, как с JS.

Firefox 58 будет оснащен новым двухуровневым компилятором 3

Двухуровневая компиляция

Для быстрой работы код должен быть оптимизирован, но этот процесс занимает время, что негативно сказывается на скорости компиляции. Двухуровневая компиляция в таком случае представляет собой некий компромисс. В ней задействованы два компилятора: один обрабатывает код быстро, но с ущербом для оптимизации, а другой за счет выигранного времени (на основе уже обработанного кода) генерирует более совершенные инструкции. По завершении этих манипуляций оптимизированный код отправляется на исполнение.При обработке JS-кода тоже использовалась подобная технология, однако в ней был задействован только оптимизирующий компилятор, что отнимало время. С WebAssembly же компиляция проходит до 10 — 15 раз быстрее, а код, генерируемый на первом уровне всего лишь вдвое медленнее (по тестам разработчиков) оптимизированного.

Компиляция на втором уровне осуществляется в отдельном потоке от исполняемого кода. Для разгона процесса компиляции этого уровня в движке Firefox 58 происходит распараллеливание обработки отдельных функций. Это позволяет разбивать генерацию кода на множество потоков и задействовать все простаивающие ядра процессора.

Дальнейшее развитие

В настоящее время декодирование и компиляция исполняются заново каждый раз при перезагрузке страницы. Но если у пользователя имеется тот же файл .wasm, он скомпилируется в идентичный предыдущему машинный код. Получается, в большинстве случаев всю эту монотонно повторяющуюся работу можно опускать. В будущих версиях браузера разработчики обещают внедрить такую возможность: поступающие файлы будут декодироваться и компилироваться только при первой загрузке страницы, а далее сохраняться в результативный машинный код в кэше HTTP. Тогда при запросе этого URL в ответ будет сразу выдаваться предварительно скомпилированный машинный код. При последующих обновлениях время загрузки страницы «практически исчезнет».

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

Следите за новыми постами
Следите за новыми постами по любимым темам
2К открытий2К показов