Краткий ответ на наш заглавный вопрос… вероятно. Как команда, мы в Websight (websightjs.com) прошли через все взлеты и падения создания сверхэффективного формата, и в этой статье мы с радостью поделимся некоторыми мыслями и ключевыми выводами, возвращаясь к нормальный мир веб-разработки из нашего путешествия на передний край, мы надеемся, вам понравится.

Брайан - Время загрузки и почему Wasm может занять немного времени

WebAssembly - потрясающее творение. Как новичку в JavaScript, всегда было неприятно пытаться записать в консоль метод массива и увидеть «[собственный код]». Теперь мы можем перевернуть сценарий и написать свой собственный код; и не просто какой-то c ++, который "hello world" cout, я написал код, который действительно облегчает некоторые вычислительно дорогостоящие процессы, в которых JavaScript не справляется. Однако есть один большой недостаток ... мои файлы действительно большие.

Согласно отчету HTTP Archive Report, в конце 2015 года средняя веб-страница загружала 363 КБ JavaScript. Причина, по которой WebAssembly не заменит Javascript, по крайней мере, в ближайшем будущем, заключается в том, насколько большими могут быть файлы и насколько медленной может быть их загрузка. Для нашего проекта, имеющего по общему признанию приличного размера, наш файл .wasm оказался значительным размером 5,9 МБ. Хотя это не фильм Netflix, который нужно транслировать, это размер сплошного сеанса просмотра веб-страниц вместе взятых, и он просто загружается с одной вашей страницы. А теперь представьте крайний случай, когда каждый сайт в Интернете загружает модули поверх своих JS-библиотек… Интернет действительно может начать тормозить.

При этом я считаю, что веб-сборка определенно имеет свое место, и по мере того, как разработчики будут совершенствоваться в ее создании, время разработки будет сокращаться, а преимущества формы wasm будут становиться все более и более очевидными.

Деб - WebAssembly - это любовь

WebAssembly позволяет вам использовать имеющиеся у вас навыки C и C ++ для веб-разработки. Используя компилятор Emscripten с открытым исходным кодом, вы можете создать модуль WebAssembly из переносимого кода C или C ++ и использовать его в коде JavaScript. Мы сделали это с помощью популярной библиотеки компьютерного зрения с открытым исходным кодом OpenCV. Нам удалось получить доступ к функциям OpenCV для обнаружения объектов со стороны клиента браузера. WebAssembly объединяет собственный код и JavaScript. C и C ++ - это только начало. Поддержка большего количества языков программирования, таких как Java, находится в стадии разработки.

Эди - используйте возможности библиотек C ++

В эпоху, предшествовавшую веб-сборке, было невозможно представить перенос надежной, ресурсоемкой библиотеки C или C ++ на JavaScript. Большинство этих «портов» JavaScript были урезанными версиями, которые обычно разрабатывались одним человеком или небольшой группой энтузиастов. Этот барьер теперь почти разрушен, и теперь Интернет может использовать собственные библиотеки C ++ в вашей среде JavaScript и запускать их со скоростью, которая сокрушает время выполнения той же библиотеки, написанной на чистом Javascript.

Что это значит? Что ж, это означает, что у Интернета теперь безграничные возможности. Вы можете использовать физические движки, редакторы мультимедиа, запускать алгоритмы машинного обучения, рендерить 3D-анимацию с высоким разрешением, созданную на C ++, прямо в браузере. Гибкость, которую это позволяет веб-разработчикам, теперь приведет к беспрецедентному росту веб-разработки в те аспекты сети, которые ранее редко исследовались.

Марк - Насколько эффективна WebAssembly?

Чтобы измерить прирост производительности по сравнению с обычными форматами JavaScript и asm.js, мы использовали алгоритм обнаружения лиц и глаз и сравнили скорости, с которыми каждый формат выполнял свои функции. Мы использовали функции обнаружения лиц и глаз на неподвижном изображении, в то время как мы использовали только обнаружение лиц с видео.

Для теста неподвижных изображений мы обнаружили, что wasm обнаруживает лица на ~ 80% быстрее, чем asm.js, и на ~ 50% быстрее, чем JavaScript. Учитывая обнаружение глаз, которое также использует алгоритм обнаружения лиц, мы обнаружили, что wasm примерно на 70% быстрее, чем asm.js и JavaScript.

Что касается потока веб-камеры, мы использовали количество кадров в секунду, чтобы определить, какой формат был наиболее производительным. Пока поток передавался в 3 элемента холста HTML5, мы непрерывно запускали наши алгоритмы на визуализированных изображениях, чтобы обнаруживать лица и кадрировать их, рисуя на холсте. Разница в производительности была более заметной с форматом видео. Изображение wasm отрисовывается от 50 до 60 кадров в секунду, asm.js - от 20 до 30, а JavaScript - от 4 до 7.

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