Firefox 58 будет оснащен новым двухуровневым компилятором
Новости
Выход новой версии популярного браузера запланирован на 23 января.
2К открытий2К показов
Создатели Mozilla Firefox сообщили о внедрении компилятора нового типа в 58 версию популярного браузера. Двухуровневая структура инструмента позволяет добиться ускорения в 10 — 15 раз по сравнению с обычным оптимизирующим компилятором.
На ПК за секунду можно скомпилировать 30 — 60 Мб кода WebAssembly, а на мобильном устройстве — около 8 Мб. Это выше пропускной способности многих сетей. Во избежание задержек в новой версии Firefox встроена возможность компиляции кода по мере его загрузки. Таким образом, загруженный код практически сразу готов к использованию.
Зачем это нужно?
Потребность в новой технологии компиляции появилась с созданием WebAssembly. Операция декодирования при использовании этого формата менее ресурсоемка, чем парсинг привычного для браузеров кода на JavaScript. Несмотря на то, что парсинг JS осуществляется в параллельном потоке, и к моменту полной загрузки все инструкции подготовлены к компиляции, этот процесс начинается только по завершении загрузки.
А с WebAssembly проблем меньше. Декодирование и компиляция в новой технологии разбираются на несколько потоков, что позволяет компилятору начать свою работу в главном из них. Это увеличивает скорость обработки, так как на нее не требуется дополнительной задержки, как с JS.
Двухуровневая компиляция
Для быстрой работы код должен быть оптимизирован, но этот процесс занимает время, что негативно сказывается на скорости компиляции. Двухуровневая компиляция в таком случае представляет собой некий компромисс. В ней задействованы два компилятора: один обрабатывает код быстро, но с ущербом для оптимизации, а другой за счет выигранного времени (на основе уже обработанного кода) генерирует более совершенные инструкции. По завершении этих манипуляций оптимизированный код отправляется на исполнение.При обработке JS-кода тоже использовалась подобная технология, однако в ней был задействован только оптимизирующий компилятор, что отнимало время. С WebAssembly же компиляция проходит до 10 — 15 раз быстрее, а код, генерируемый на первом уровне всего лишь вдвое медленнее (по тестам разработчиков) оптимизированного.
Компиляция на втором уровне осуществляется в отдельном потоке от исполняемого кода. Для разгона процесса компиляции этого уровня в движке Firefox 58 происходит распараллеливание обработки отдельных функций. Это позволяет разбивать генерацию кода на множество потоков и задействовать все простаивающие ядра процессора.
Дальнейшее развитие
В настоящее время декодирование и компиляция исполняются заново каждый раз при перезагрузке страницы. Но если у пользователя имеется тот же файл .wasm, он скомпилируется в идентичный предыдущему машинный код. Получается, в большинстве случаев всю эту монотонно повторяющуюся работу можно опускать. В будущих версиях браузера разработчики обещают внедрить такую возможность: поступающие файлы будут декодироваться и компилироваться только при первой загрузке страницы, а далее сохраняться в результативный машинный код в кэше HTTP. Тогда при запросе этого URL в ответ будет сразу выдаваться предварительно скомпилированный машинный код. При последующих обновлениях время загрузки страницы «практически исчезнет».
JS-код уже кэшируется подобным методом, и разработчики утверждают, что вопрос только в расширении этой технологии на машинный код файлов .wasm.
2К открытий2К показов