Представлен декодировщик видео H.264, оформленный на языке JavaScript

Один из разработчиков из проекта Mozilla представил результаты эксперимента, целью которого была демонстрация производительности современных JavaScript-движков, способных справляться с выполнением ресурсоёмких задач. В качестве задачи было выбрано создание приложения для декодирования видеопотоков H.264, написанного целиком на JavaScript.

Для реализации проекта был выбран готовый декодер H.264, написанный на языке Си, который был упрощён, преобразован в биткод LLVM и транслирован в JavaScript при помощи компилятора Emscripten. Результат оказался впечатляющим - используя только штатные оптимизации Emscripten удалось достигнуть производительности декодирования видео в браузере с частотой около 30 кадров в секунду. Проведя небольшие оптимизиации скорость работы удалось увеличить примерно на 40%. По мнению разработчиков, применив дополнительные оптимизации, такие как задействование WebGL для обращения к средствам аппаратного ускорения и использование конструкций для параллельной обработки данных, можно достигнуть ещё более впечатляющих результатов.

Демонстрацию декодировщика H.264, который развивается под кодовым именем Broadway, можно посмотреть на данной странице. Код проекта опубликован на GitHub. Для запуска декодировщика достаточно клонировать Git-репозиторий Broadway и открыть файл Demo/broadway.html в свежей ночной сборке Firefox, в состав которой недавно включен улучшенный анализатор типов, существенно ускоряющий работу встроенного в JavaScript-движок JIT-компилятора. Обычно, JavaScript-код полученный после компиляции Emscripten отстаёт от первоначального варианта на языке Си в 3-4 раза. Новая техника оптимизации в JIT-компиляторе Firefox позволила сократить данный разрыв.

Майк Шевер (Mike Shaver), один из основателей проекта Mozilla, привел Broadway в пример, показав как используя новые техники оптимизации удалось достигнуть того, что ранее считалось невозможным. В отличие от таких методов, как использование Flash или GoogleNative Client для выполнения требующих интенсивных вычислений блоков кода или предложений по замене JavaScript на языки подобные Google Dart, в Mozilla просто пытаются сделать JavaScript более быстрым. Для этого, с одной стороны вносятся новые оптимизации в JavaScript-движок, а с другой - добавляются новые возможности языка, такие как бинарные массивы, жестко структурированные типы, поддержка распараллеливания с задействованием инструкций SIMD, улучшение средств для прямого обращения к ресурсам GPU.

©  OpenNet