Проект Mozilla опубликовал план развития технологий, нацеленных на превращение Firefox в платформу для создания современных браузерных игр, обеспечивающий высокую производительность и работающих без необходимости установки внешних плагинов. Из наиболее значительных достижений в области создания высокопроизводительных браузерных приложений отмечается WebAssembly. В представленном плане рассматривается какие ещё технологии необходимы для разработки первоклассных игр. По мнению Mozilla, компьютерные игры являются отличным катализатором для продвижения новых технологий, которые затем смогут использоваться и в других категориях приложений.
Технологии уже находящиеся в разработке и готовые появиться в следующем году:
- Развитие средств для обеспечения работы многопоточных игр, эффективно работающих в Web: стандартизация SharedArrayBuffer, добавление в Emscripten поддержки pthreads, реализация доступа их Web Workers к чувствительным к производительности Web API (WebGL, WebSockets, IndexedDB, WebAudio, WebRTC и WebVR), возможность совместного использования скомпилированного кода между Web Workers;
- Задействования в web-приложениях инструкций SIMD для оптимизации JavaScript-кода: стандартизация API SIMD.js, позволяющего организовать распараллеливание выполнения операций над данными c использованием инструкций SIMD, добавление поддержки SIMD в WebAssembly и Emscripten;
- Оптимизация процесса загрузки, компиляции и первого запуска больших порций кода (миллионы строк кода): WebAssembly позволит значительно сократить размер загружаемого кода, декодирование скомпилированного представления WebAssembly будет значиетельно быстрее разбора JavaScript/asm.js, развивается быстрый компилятор WebAssembly/asm.js, позволяющий почти сразу стартовать приложение, продолжив компиляцию в фоне. Код компиляции и разбора будет вынесен в параллельно выполняемый процесс;
- Создание решения для обеспечения сжатия без зависимости от HTTP Content-Encoding:gzip. Поддержка в Emscripten декодирования asm.js / WebAssembly в процессе загрузки кода;
- Улучшение средства для организации хранилищ в браузере: возможность доступа к временным хранилищам без вывода диалога с запросом полномочий от пользователя, учёт при расчёте квот характеристки аккаунта, предоставление дополнительной информации о квотах, создание механизма для доступа к одному хранилищу с разных сайтов, стандартизация API для организации постоянных хранилищ, улучшение пользовательского интерфейса для управления хранилищами в браузере;
- Расширение графических возможностей: реализация WebGL2, стандартизация потоковой передачи WebGL canvas через WebRTC, возможность запуска операций WebGL на дискретной графической карте на системах с гибридной графикой (NVIDIA Optimus);
- Предоставление средств для обхода связанных с памятью ограничений 32-архитектуры: поставка 64-разрядных сборок для Windows, предоставление возможности задействования pthreads и FileReaderSync для выполнение синхронного файлового ввода/вывода в Emscripten VFS;
- Проведение работы по изучению способов повышения производительности на разных платформах: оптимизация производительности WebAudio, сокращение времени компиляции шейдеров WebGL, сокращение задержек и неоднородности при рендеринге, анализ производительности JavaScript, DOM, WebGL, WebRTC, кодеков, раскладки на экране, рендеринга, композитинга, анимации и т.п.
- Продолжение развития Emscripten: добавление поддержки pthreads, SIMD и WebAssembly, увеличение скорости компиляции;
- Продолжение развития средств для разработчиков игр: улучшение поддержки Web Worker, возможность установки перехватчиков ошибок в asm.js/WebAssembly.
Вопросы, которые требуют изучения и обсуждения:
- Предоставление средств для определения числа нитей Web Workers, необходимых для обслуживания заданной нагрузки;
- Повышение лимита на число нитей Web Workers, сейчас лимит выставлен в 20 нитей на сайт;
- Внедрение многопроцессной архитектуры, гарантирующей свежее нефрагментированное адресное пространство для игр, с выделением больших непрерывных областей памяти при запуске процесса;
- Создания механизма уведомления приложений от исчерпании доступной памяти;
- Разработка новых стандартов для улучшения IME (Input Method Editor) API и создания полноценных систем редактирования;
- Добавление API для управления курсором;
- Улучшение Gamepad API;
- Реализация в Pointer Lock API расширения Pointer Clipping;
- Интеграция развиваемых в рамках проекта Emscripten инструментов для анализа использования памяти и отладки утечек памяти;
- Стандартизация более масштабируемой формы source map, пригодной для большого скомпилированного кода.