WebAssembly: значение, преимущества, варианты использования и многое другое

Увлеклись шумихой вокруг WebAssembly, но не совсем уверены, что это такое? Вот низкий уровень.

WebAssembly или Wasm — это формат двоичного кода для создания программ, которые могут выполняться на любой компьютерной архитектуре.

Система включает в себя виртуальную машину и компилятор, который транслирует компьютерный код с языков программирования, таких как C или C++, в удобочитаемый формат .wat и двоичный .wasm.

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

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

Что такое веб-сборка?

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

WebAssembly, впервые выпущенный в 2017 году, является рекомендацией W3C с 2019 года и поддерживается многочисленными участниками, включая Mozilla, Google, Microsoft, Red Hat и многие другие.

Первоначальная цель состояла в том, чтобы добиться почти естественной скорости выполнения, которую можно было бы найти в приложениях C/C++ внутри браузера. Он также должен быть безопасным, открытым, отлаживаемым и не имеющим версии веб-стандартом, обратно совместимым и совместимым с JavaScript.

Как работает WebAssembly?

WebAssembly разработан как механизм выполнения, такой как Java или JavaScript, который может быть встроен в браузер или серверную среду для запуска компьютерного кода, скомпилированного в двоичном формате .wasm или текстовом формате .wat.

Чтобы написать код для выполнения WebAssembly, разработчик пишет программу на любом из многочисленных поддерживаемых языков. Затем скомпилируйте его с помощью компилятора WebAssembly либо AOT (заблаговременно), либо JIT (как раз вовремя).

Этот код может выполнять большую часть работы в среде выполнения, но он не может получить доступ к объектам DOM браузера или изменить их. Любое такое взаимодействие должно проходить через JavaScript.

Как создать образец приложения WebAssembly

Создание простого приложения Wasm для веб-браузера возможно всего за несколько шагов, как вы можете видеть ниже:

  1. Скачайте и установите Эмскриптен SDK.
  2. Напишите свой образец привет мир.c код или сделайте это на C++/Rust, если хотите.
  3. Run emcc helloworld.c -s WASM=1 -s helloworld.html в терминале, чтобы скомпилировать код в WebAssembly с помощью Emscripten. Он создаст необходимые вам двоичные файлы Wasm, файлы HTML и JavaScript (связующий код).
  4. Откройте страницу helloworld.html через веб-браузер.

Преимущества WebAssembly

Есть много причин для принятия WebAssembly и связанных с ним технологий, в том числе:

  • Почти родная производительность – WebAssembly имеет такой низкоуровневый дизайн, что предлагает производительность, подобную низкоуровневым языкам, таким как C и C++.
  • Безопасность – Система предназначена для обеспечения безопасности за счет ее изоляции в виртуальной среде с ограниченным доступом к системе.
  • Открытый стандарт – Многие организации и частные лица вносят свой вклад в WebAssembly, и это официальная рекомендация W3C.
  • Небольшой вес – WebAssembly компилируется в двоичный код для выполнения на виртуальной машине. Этот код является переносимым и не требует системных файлов и не поставляется с ними.
  • Многоязычная поддержка – Более 50 языков могут компилироваться в WebAssembly.
  • Независимая платформа – Виртуальная машина WebAssembly предназначена для каждой архитектуры и представляет одну и ту же среду выполнения. Все, что нужно сделать разработчику, — это написать код для WebAssembly.

Ограничения WebAssembly

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

WebAssembly против Java

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

Как и в случае с Java, WebAssembly использует RE (среду выполнения) для выполнения своего кода, но, в отличие от Java, вы можете писать WebAssembly на выбранном вами языке.

WebAssembly против JavaScript

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

Внутри веб-браузеров JavaScript имеет доступ к DOM, а WebAssembly — нет. Однако, когда дело доходит до скорости выполнения, WebAssembly превосходит JavaScript благодаря скорости выполнения кода, близкой к исходной.

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

WebAssembly против Docker против Kubernetes

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

Kubernetes, с другой стороны, представляет собой открытые источники система для управления и развертывания контейнерных приложений, таких как Docker, CRI-O,Containerd и любая реализация Kubernetes CRI (Container Runtime Interface). Kubernetes также упрощает масштабирование облачных развертываний на нескольких серверах или виртуальных машинах.

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

Помимо браузера

Вначале были веб-серверы. Вы должны были выделить полную машину в качестве сервера. Затем появились виртуальные машины или ВМ, которые позволяли серверу работать только на одном или нескольких потоках ЦП. Тем не менее, вам нужно было иметь выделенную виртуальную машину.

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

Во-первых, файлы докеров могут иметь размер в несколько гигабайт, а это означает небольшую задержку в работе. ввод в эксплуатацию и другие вопросы управления. Однако аналогичный файл Wasm может иметь размер всего несколько МБ, поскольку представляет собой предварительно скомпилированный двоичный файл. Это обеспечивает гораздо более быстрое время запуска, чем Docker, что идеально подходит для некоторых приложений, критичных ко времени.

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

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

Для получения дополнительной информации о таких проектах, как ВасмОблако и ВасмЭдж превращают WebAssembly в жизнеспособную вычислительную платформу.

Примеры использования васм

Существует множество вариантов использования WebAssembly, учитывая его специфику. Их можно разделить на три основные группы; в браузере, вне браузера и гибридных установках.

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

Ниже приведены варианты использования, в которых Wasm может преуспеть:

  • Уже существующий высокопроизводительный код — Старый, но замечательный код, который можно просто портировать на WebAssembly.
  • Новый высокопроизводительный код – Те, которые вам нужно разработать и внедрить с нуля.
  • Портирование настольных приложений в Интернет – Это может открыть новое поколение настольных веб-решений, таких как веб-редактирование видео.
  • Облачные вычисления – Работайте вместе с Docker и Kubernetes, чтобы открывать новые возможности.

Ниже приведены конкретные приложения и сценарии, в которых Wasm может преуспеть:

  • Редактирование видео и изображений
  • Дизайн игры
  • AI Приложения
  • Приложения виртуальной и дополненной реальности
  • Музыкальные приложения
  • P2P-приложения
  • Серверные приложения
  • Облачные/кластерные вычисления
  • Системы автоматизированного проектирования
  • Моделирование платформы ОС
  • Шифрование
  • Локальный веб-сервер
  • Приложения для удаленного рабочего стола
  • Научные визуализации
  • Гибридные нативные приложения на смартфонах
  • На IoT-устройствах

Список поддерживаемых языков и фреймворков

Более 50 языков компилируются в WebAssembly, и вот некоторые из самых популярных:

  • C
  • C + +
  • R
  • Ruby
  • SWIFT
  • Go
  • Котлин
  • Ржавчина
  • PHP
  • Blazor – Фреймворк для разработчиков .NET.
  • JwebAssembly – Компилятор для байт-кода Java и родственных языков, таких как JRuby, Jython, Groovy, Scala и Kotlin.
  • Тис – Фреймворк Rust для создания многопоточных веб-приложений с использованием WebAssembly.
  • Ассемблерскрипт – Язык, специально разработанный для создания кода WebAssembly.
  • зерна – Строго типизированный функциональный язык.
  • Мотоко

Вы можете найти больше языков здесь.

Список сред выполнения и инструментов WebAssembly

  • Все основные браузеры поддерживают Wasm.
  • Пиодид – Среда выполнения Python в браузере с научным стеком Python, включая Pandas, NumPy, SciPy.
  • вамр
  • вес – Для микросервисов и веб-приложений
  • Был ли я – Интерфейс модульной системы
  • ВасмВремя – Быстрая и безопасная среда выполнения WebAssembly.
  • Васмер
  • Люсет
  • ВасмОблако – Облачная среда
  • Крастлет — Kubernetes kublete для запуска Wasm, написанный на Rust.
  • ВасмЭдж – Облачная и пограничная среда выполнения

Заключение

Мы подошли к концу нашего знакомства с WebAssembly и его возможностями для вычислений. И, как видите, он обещает много.

Тем не менее, он все еще находится в стадии разработки, но в постоянном развитии. И если вы заинтересованы, вы можете найти больше информации здесь, здесьи здесь.

Ннамди Океке

Ннамди Океке

Ннамди Океке — компьютерный энтузиаст, который любит читать самые разные книги. Он предпочитает Linux, а не Windows/Mac, и использует
Ubuntu с первых дней. Вы можете поймать его в твиттере через Бонготракс

Статей: 283

Получить технические вещи

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