В Интернете ходит мем, демонстрирующий отношение разработчиков к новым технологиям.

Хотя забавно, но я нашел это правдой, на самом деле единственное, что я бы изменил в этой картине, это то, что мы, вероятно, сначала пошли бы в голову.

Новые технологии разработки похожи на последние модные тенденции: сейчас все говорят об этом новом фреймворке, а в следующий момент появляется другой, к которому люди стекаются.

Но, как и большинство модных тенденций, эти «новые и захватывающие» технологии присутствуют на мгновение и не получают поддержки в ближайшее время.

Однако в ходе исследования для этой статьи я обнаружил технологию, которая, на мой взгляд, не является тенденцией, но, по всей видимости, появится в обозримом будущем.

Это технология Web Assembly.

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

Что такое WebAssembly?

Разработан и разработан консорциумом W3C группой людей, ответственных за разработку стандартов для всемирной паутины. WASM был создан с целью предоставить разработчикам низкоуровневый язык, который может выполняться в браузере или на сервере, обеспечивая повышение производительности приложения.

Многие из основных языков имеют поддержку WASM, что означает, что разработчик может писать свой код на своем языке по выбору, например (C, C ++, Go, Rust), использовать инструмент компиляции, такой как wasm-pack или Emscripten, для создания файла веб-сборки, который может выполняться прямо в браузере.

По сообщению w3.org от 5 декабря 2019 года, W3C официально признал WebAssembly четвертым языком, поддерживаемым в основных браузерах. До этого браузер поддерживал три языка (HTML, CSS и JS).

Каковы преимущества Web Assembly?

В качестве целевого объекта компиляции у разработчиков есть возможность выбрать эффективные языки для записи своей логики и компиляции в WASM. Последствия этого развития огромны. Разработчики могут писать код на таких языках, как (C, Rust, Go и т. Д.), а затем компилировать его в двоичный файл для выполнения в браузере. Это позволяет конечным пользователям теперь даже использовать приложения, которые изначально были для рабочего стола, и напрямую использовать их в веб-браузерах без установок или зависимостей от среды с невероятно высокой скоростью, близкой к исходной, как если бы вы использовали его на своем рабочем столе. Такие проекты, как Tensorflow, Unity, AutoCAD, Google Earth и многие другие, реализовали веб-сборку для переноса своего кода на веб-платформы с многообещающими результатами.

Для чего можно использовать WebAssembly?

По словам Джоша Ханафорда, который написал в блоге на IBM Developer под названием «Почему совместное использование WebAssembly и Rust улучшает производительность Node.js», Джош выделяет несколько вариантов использования веб-сборки, например приложения AR / VR, компьютерное черчение (CAD). , и даже AI.

Например, во время своего исследования я наткнулся на веб-сайт OpenCV и их демонстрации, сравнивающие производительность WebAssembly с JavaScript (asm.js). На первом изображении ниже я тестировал обнаружение лиц OpenCV с помощью JavaScript и заметил, что у него низкая производительность в API обнаружения лиц, поскольку он изо всех сил пытается поддерживать 18 кадров в секунду. Однако при использовании реализации WebAssembly обнаружения лиц OpenCV это приложение поддерживает частоту кадров 53 кадра в секунду. Это почти в 3 раза лучше по сравнению с реализацией JS.

В дополнение к тестированию уже предварительно написанных демонстраций, я хотел также протестировать реализацию на себе. Для этого я выбрал два тестовых теста. Первый демонстрирует, как работает WASM по сравнению с JS с использованием рекурсии, а во-вторых, как он работает по сравнению с JS с использованием циклов for.

Для первого теста я использовал алгоритм Фибоначчи для проверки рекурсии. Как вы видите ниже, в первом тесте при использовании веб-сборки был достигнут значительный прирост производительности, но по мере увеличения входных данных разница в производительности между ними была незначительной.

Как насчет циклов for, как они будут работать в таких случаях?

Для этого теста я написал функцию, которая определяла, является ли число простым или нет, используя итеративный подход для цикла. Как видно из таблицы справа, в среднем WASM превзошел традиционный JS в 7 раз!

Вот несколько фрагментов кода функции, которые я написал на Rust, которые затем компилируются в веб-сборку с использованием библиотеки rust, называемой (wasm-pack). В этих фрагментах кода следует отметить одну вещь, чтобы Чтобы использовать эти функции в браузере, мне пришлось аннотировать свои функции с помощью wasm-bindgen. Подробнее об этом в будущем блоге.

Заблуждения

Естественно, что в отношении такого впечатляющего языка, как веб-сборка, в сообществе разработчиков возникли некоторые заблуждения. Такие как:

В связи с тем, что такой язык, как WebAssembly, набирает обороты в сообществе разработчиков, возникают некоторые неправильные представления, такие как: если я решу использовать WebAssembly, мне придется переписывать на нем все свое приложение? Или WebAssembly заменит в будущем JavaScript?

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

Заключение

Я надеюсь, что эта статья была полезной и открыла вам глаза на возможности того, что WebAssembly может сделать в будущем. От повышения производительности для JavaScript до огромного количества вариантов использования, которые теперь доступны с исходными языками, такими как (C, C ++ и Rust), которые могут быть скомпилированы в WebAssembly и выполнены непосредственно в браузере. Что касается меня, я восхищен этой технологией, и мне не терпится применить ее в своих проектах здесь, на работе.