В сегодняшнем выпуске Firefox мы стали первым браузером, поддерживающим WebAssembly. Если вы еще не слышали о WebAssembly, это новый стандарт, созданный на основе наших исследований и позволяющий обеспечить производительность, близкую к нативной для веб-приложений.

WebAssembly - одно из самых больших достижений веб-платформы за последнее десятилетие.

Этот новый стандарт позволит создавать потрясающие видеоигры и высокопроизводительные веб-приложения для таких вещей, как компьютерный дизайн, редактирование видео и изображений, а также научная визуализация. Со временем многие существующие приложения для повышения производительности (например, электронная почта, социальные сети, текстовые редакторы) и платформы JavaScript, вероятно, будут использовать WebAssembly для значительного сокращения времени загрузки при одновременном повышении производительности во время работы. В отличие от других подходов, которые требовали подключаемых модулей для достижения почти нативной производительности в браузере, WebAssembly полностью работает на веб-платформе. Это означает, что разработчики могут интегрировать библиотеки WebAssembly для ресурсоемких вычислений (например, сжатия, распознавания лиц, физики) в существующие веб-приложения, которые используют JavaScript для менее интенсивной работы.

Чтобы быстро разобраться в WebAssembly и понять, как некоторые компании рассматривают ее использование, посмотрите это видео. Вы получите известие от инженеров Mozilla и таких партнеров, как Autodesk, Epic и Unity.

Путь сюда был долгим, извилистым и увлекательным.

Изначально JavaScript задумывался как облегченный язык для довольно простых скриптов. Начинающим разработчикам должно быть легко вводить код. Вы знаете - для относительно простых вещей, таких как обеспечение правильного заполнения формы при ее отправке.

С тех пор многое изменилось. Современные веб-приложения - это сложные компьютерные программы с клиентским и серверным кодом, большая часть которого написана на JavaScript.

Но, несмотря на все достижения в языке программирования JavaScript и движках, которые его запускают (включая движок Mozilla SpiderMonkey), JavaScript все еще имеет присущие ему ограничения, которые делают его плохо подходящим для некоторых сценариев. В частности, когда браузер фактически выполняет JavaScript, он обычно не может запускать программу так быстро, как операционная система может запускать сопоставимую нативную программу, написанную на других языках программирования.

Мы в Mozilla всегда хорошо знали об этом, но это никогда не ограничивало наших амбиций в отношении Интернета. Итак, несколько лет назад мы приступили к исследовательскому проекту - создать настоящую виртуальную машину в браузере, которая была бы способна безопасно запускать как JavaScript, так и высокоскоростные языки с почти нативной скоростью. В частности, мы поставили цель позволить современным видеоиграм запускаться в Firefox без подключаемых модулей, зная, что тогда веб-платформа сможет запускать практически любые приложения. Нашим первым важным шагом после множества экспериментов было продемонстрировать, что игры, построенные на популярных игровых движках, могут работать в Firefox с использованием исследовательского низкоуровневого подмножества JavaScript под названием asm.js.

Подъязык asm.js работал впечатляюще, и мы знали, что этот подход может работать даже лучше в качестве первоклассного веб-стандарта. Итак, используя asm.js в качестве доказательства концепции, мы решили сотрудничать с другими производителями браузеров, чтобы установить такой стандарт, который мог бы работать как часть браузеров. Вместе с опытными инженерами производителей браузеров мы пришли к единому мнению по поводу WebAssembly. Мы ожидаем, что поддержка для него скоро начнется в других браузерах.

Веб-приложения, написанные с помощью WebAssembly, могут работать со скоростью, близкой к родной, потому что, в отличие от JavaScript, весь код, который пишет программист, анализируется и компилируется заранее, прежде чем попасть в браузер. После этого браузер просто видит низкоуровневые машинно-готовые инструкции, которые он может быстро проверить, оптимизировать и запустить.

В некотором смысле WebAssembly меняет то, что значит быть веб-разработчиком, а также фундаментальные возможности Интернета. С помощью WebAssembly и сопутствующего набора инструментов программы, написанные на таких языках, как C / C ++, могут быть перенесены в Интернет, чтобы они работали с производительностью, близкой к родной. Мы ожидаем, что по мере развития WebAssembly вы также сможете использовать его с языками программирования, часто используемыми для мобильных приложений, такими как Java, Swift и C #.

Если вам интересно узнать больше о предыстории WebAssembly, ознакомьтесь с этим закулисным обзором.

WebAssembly уже доступен в Firefox для Windows, MacOS, Linux и Android. Мы особенно рады потенциалу мобильных устройств - действительно ли все эти приложения должны быть нативными?

Если вы хотите опробовать некоторые приложения, использующие WebAssembly, обновитесь до Firefox 52 и посмотрите эту демонстрацию Zen Garden от Epic. Для вашего удобства мы встроили видео из демонстрации ниже.

Если вы разработчик, заинтересованный в работе с WebAssembly, ознакомьтесь с документацией по WebAssembly по MDN. Возможно, вы также захотите увидеть эту серию сообщений в блоге Лин Кларк, в которых WebAssembly объясняется с помощью классных мультфильмов.

Мы в Mozilla сосредоточены на продвижении Интернета и на том, чтобы сделать Firefox лучшим браузером. С сегодняшней поставкой WebAssembly и полным ходом Project Quantum мы настроены более оптимистично в отношении Интернета и Firefox, чем когда-либо.

Особая благодарность Райану Поллоку за участие в этой публикации.