Технология asm.js для Mozilla Firefox стала ещё ближе по скорости исполнения к машинному коду
Со времени выхода Firefox 22 в июне браузер включает особое подмножество JavaScript — asm.js, которое призвано принципиально ускорить исполнение сложного кода JavaScript-программ, скомпилированных из языка C++ в asm.js. Благодаря модулю OdinMonkey для JavaScript-движка Firefox, код asm.js исполняется значительно быстрее, а на днях Mozilla сообщила, что ей удалось добиться определенных успехов в увеличении скорости обработки кода asm.js.
Для продвижения высокопроизводительных веб-приложений вроде игр Google делает ставку на технологию Native Client, позволяющую веб-приложениям исполнять в браузере машинный код. Mozilla развивает принцип исполнения JavaScript на скорости, близкой к машинному коду с помощью особого компилятора Emscripten. Оба подхода имеют свои плюсы и минусы, но каждый позволяет разработчикам писать изначально код в C или C++, а после особой компиляции исполнять его в браузере.
За прошедшее с июня время, как сообщила команда Mozilla в своём блоге, ей удалось добиться производительности, лишь в полтора раза уступающей скорости выполнения машинного кода. Во многом это было обеспечено небольшими изменениями в asm.js и компиляторе Emscripten. Также Firefox получил ряд существенных оптимизаций по обработке операций с плавающей запятой. Последние обеспечивают следующий прирост (оранжевый — Firefox без оптимизаций float32, а красный — с ними):

Mozilla отмечает, что указанный прирост — не предел, и в перспективе будут внедрены дополнительные улучшения в работе связки Emscripten и JavaScript, которые позволяет ещё сильнее сократить отставание по скорости от машинного кода. На данный момент asm.js остаётся по сути проектом Mozilla. И хотя команда Google Chrome хорошо осведомлена о технологии и добавила её в тестовый пакет Octane, вряд ли в скором времени Chrome будет её поддерживать. Впрочем, стоит отметить, что код asm.js может исполняться на любом современном движке JavaScript, просто медленнее, чем в Firefox.
Большая часть игр движков написаны на C или C++, так что и asm.js прежде всего концентрируется на эту сферу развлечений — технология в своё время понравилась специалистам Epic Games и они выпустили особую версию демонстрации Epic Citadel, исполняемую в браузере без всяких дополнений при помощи веб-технологий HTML5, WebGL и JavaScript. До этого сама Mozilla представила демонстрационный боевик BananaBread (в основе лежат JavaScript, WebGL и WebRTC) на базе движка Cube 2: Sauerbraten, написанного изначально на C++ и OpenGL.