Один из разработчиков из проекта Mozilla представил результаты эксперимента, целью которого была демонстрация производительности современных JavaScript-движков, способных справляться с выполнением ресурсоёмких задач. В качестве задачи было выбрано создание приложения для декодирования видеопотоков H.264, написанного целиком на JavaScript.
Для реализации проекта был выбран готовый декодер H.264, написанный на языке Си, который был упрощён, преобразован в биткод LLVM и транслирован в JavaScript при помощи компилятора Emscripten. Результат оказался впечатляющим - используя только штатные оптимизации Emscripten удалось достигнуть производительности декодирования видео в браузере с частотой около 30 кадров в секунду. По мнению разработчиков, применив дополнительные оптимизации, такие как задействование WebGL для использование средств аппаратного ускорения и использование конструкций для параллельной обработки данных, можно достигнуть ещё более впечатляющих результатов.
Демонстрацию декодировщика H.264, который развивается под кодовым именем Broadway, можно посмотреть на данной странице. Код проекта опубликован на GitHub. Для запуска декодировщика достаточно клонировать Git-репозиторий Broadway и открыть файл Demo/broadway.html в свежей ночной сборке Firefox, в состав которой недавно включен улучшенный анализатор типов, существенно ускоряющий работу встроенного в JavaScript-движок JIT-компилятора.
Майк Шевер (Mike Shaver), один из основателей проекта Mozilla, привел Broadway в пример, как используя новые техники оптимизации удалось достигнуть ранее считавшегося невозможным. В отличие от таких методов, как использование Flash или GoogleNative Client для выполнения требующих интенсивных вычислений блоков кода или предложения по замене JavaScript на языки подобные Google Dart, в Mozilla просто пытаются сделать JavaScript более быстрым. Для этого с одной стороны вносятся новые оптимизации в JavaScript-движок, а с другой - добавляются новые возможности языка, такие как бинарные массивы, жестко структурированные типы, поддержка распараллеливания с задействованием инструкций SIMD, улучшение средств для прямого обращения к ресурсам GPU.