В Google Chrome работа с высокопроизводительными веб-приложениями (например, онлайн играми), возложена на технологию Native Client, с которой в браузере выполняется машинный код приложений. В Mozilla решили пойти другой дорогой и исполняют JavaScript на скоростях, близких к машинному коду, в чем им помогает особый компилятор Emscripten. В обоих случаях есть свои преимущества и недостатки, однако результат достигается один и тот же: разработчики получают возможность изначально писать код в C или C++ и после этого компилировать его для исполнения в браузере.
Как сообщается в блоге команды разработчиков Mozilla, за прошедшее с момента выпуска Firefox 22 время, они добились такого повышения скорости обработки JavaScript, что он всего лишь в полтора раза уступает скорости машинного кода. Во многом результат достигнут благодаря небольшим изменениям в компиляторе Emscripten и asm.js. Также в браузере Mozilla за это время был существенно оптимизирован процесс обработки операций с плавающей запятой.
В перспективе разработчики планируют внедрить дополнительные улучшения для работы связки JavaScript и Emscripten, за счет которых они еще сильнее сократят отставание по скорости от машинного кода.
На сегодняшний день asm.js является собственной разработкой компании Mozilla. И хотя разработчики Google хорошо осведомлены о возможностях этой технологии, с ее внедрением в Chrome никто не спешит: они ограничились лишь добавлением технологии в тестовый пакет Octane. У кода asm.js есть одна интересная особенность – он легко выполняется на любых современных движках JavaScript, но только делает это несколько медленнее, чем в Mozilla Firefox.
Большая часть онлайн-игр создается с движками, написанными на C или C++, поэтому код asm.js сконцентрирован, первым делом, на этой сфере развлечений. В свое время эту технологию высоко оценили специалисты Epic Games, которые даже выпустили для демонстрации ее возможностей исполняемую в браузере игру Epic Citadel. Для работы последней не нужны никакие дополнения: хватает поддержки WebGL, JavaScript и HTLM5.