WebAssembly: Значение, предимства, случаи на употреба и други

Увлечени сте в рекламата на WebAssembly, но не сте сигурни какво точно представлява? Ето го ниското.

WebAssembly или Wasm е формат с двоичен код за създаване на програми, които могат да се изпълняват на всяка компютърна архитектура.

Системата се състои от виртуална машина и компилатор, който превежда компютърен код от езици за програмиране, като C или C++, в четими за човека формати .wat и двоични .wasm.

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

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

Какво е WebAssembly?

WebAssembly е формат с двоичен код, който работи на виртуална машина и към който могат да се компилират различни езици. Той е проектиран да бъде преносим и може да работи в уеб браузър или като сървърно приложение.

Пуснат за първи път през 2017 г., WebAssembly е препоръка на 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. Изтеглете и инсталирайте Emscripten SDK.
  2. Напишете своя образец helloworld.c код или го направете в C++/Rust, ако предпочитате.
  3. бягане emcc helloworld.c -s WASM=1 -s helloworld.html в терминал, за да компилирате кода в WebAssembly с Emscripten. Той ще създаде бинарните, HTML и JavaScript файловете на Wasm, от които се нуждаете (слепващ код).
  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 (Runtime Environment), за да изпълни своя код, но за разлика от 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, контейнер и всяко изпълнение на Kubernetes CRI (Container Runtime Interface). Kubernetes също така улеснява мащабирането на облачни внедрявания в множество сървъри или виртуални машини.

От тази гледна точка WebAssembly е по-подобен на Docker и може да бъде направен да работи като контейнеризирано облачно приложение с помощта на Kubernetes. Освен това предлага много предимства пред Docker, но вероятно няма да го замени.

Отвъд браузъра

В началото имаше уеб сървъри. Трябваше да посветите цяла машина като сървър. След това имаше виртуални машини или VM, които позволяваха на сървъра да работи само на една или повече нишки на процесора. Все пак трябваше да имате специална виртуална машина.

Облак с компютъра направи възможно стартирането и стартирането на сървъри само когато е необходимо чрез контейнеризиране на приложенията. Това доведе до намаляване на разходите, тъй като трябваше да плащате само за това, което използвате – без повече специални машини. Но все още има няколко проблема.

Първо, докер файловете могат да бъдат големи няколко гигабайта и това означава малко забавяне при стартиране и други проблеми с управлението. Подобен Wasm файл обаче може да бъде голям само няколко MB, защото е предварително компилиран двоичен файл. Това му дава много по-бързо време за стартиране от Docker, идеално за определени критични за времето приложения.

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

Тези функции правят WebAssembly идеален за изпълнение на облачни микроуслуги, въпреки че Docker приложенията все още са за предпочитане за приложения, които изискват повече контрол върху операционната среда и файловата система.

За повече информация проекти като WasmCloud намлява WasmEdge разработват WebAssembly в жизнеспособна компютърна платформа.

Случаи на използване на Wasm

Има много случаи на използване на WebAssembly, като се има предвид неговия особен характер. Те могат да бъдат разделени на три големи групи; настройки в браузъра, извън браузъра и хибридни настройки.

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

Следва преглед на случаите на употреба, при които Wasm може да превъзхожда:

  • Вече съществуващ код с висока производителност – Стар, но прекрасен код, който можете просто да пренесете към WebAssembly.
  • Нов код с висока производителност – Тези, които трябва да проектирате и реализирате от нулата.
  • Пренасяне на настолни приложения към мрежата – Това може да отвори нова порода уеб базирани десктоп решения, като напр уеб базирано редактиране на видео.
  • Облак с компютъра – Работете заедно с Docker и Kubernetes за нови възможности.

Следва поглед върху конкретни приложения и сценарии, при които Wasm може да превъзхожда:

  • Редактиране на видео и изображения
  • Дизайн на игри
  • AI приложения
  • Приложения за виртуална и разширена реалност
  • Музикални приложения
  • P2P приложения
  • Приложения от страна на сървъра
  • Облачни/клъстерни изчисления
  • Компютърно проектиране
  • Симулация на OS платформа
  • Encryption
  • Локален уеб сървър
  • Приложения за отдалечен работен плот
  • Научни визуализации
  • Хибридни собствени приложения на смартфони
  • На IoT устройства

Списък на поддържаните езици и рамки

Над 50 езика се компилират в WebAssembly и ето някои от най-популярните:

  • C
  • C + +
  • R
  • Руби
  • Swift
  • Go
  • Kotlin
  • Ръжда
  • PHP
  • Блазор – Рамка за .NET разработчици.
  • JwebAssembly – Компилатор за байт код на Java и сродни езици като JRuby, Jython, Groovy, Scala и Kotlin.
  • тис – Rust рамка за създаване на многонишкови уеб приложения с помощта на WebAssembly.
  • AssemblyScript – Език, специално проектиран за създаване на код на WebAssembly.
  • Зърно – Строго типизиран функционален език.
  • Мотоко

Можете да намерите още езици тук.

Списък на времена за изпълнение и инструменти на WebAssembly

  • Всички основни браузъри поддържат Wasm
  • Пиодид – Време за изпълнение на Python в браузъра с научния стек на Python, включително Pandas, NumPy, SciPy.
  • wamr
  • уаги – За микроуслуги и уеб приложения
  • Бях ли – Модулен системен интерфейс
  • WasmTime – Бързо и сигурно време за изпълнение на WebAssembly.
  • Васмер
  • Луцет
  • wasmCloud – Облачна среда
  • Крустлет – Kubernetes kublete за стартиране на Wasm, написан на Rust.
  • WasmEdge – Облачна и периферна среда за изпълнение

Заключение

Стигнахме до края на нашето пътуване до WebAssembly и какво съдържа той за изчисленията. И както виждате, има много обещания.

Все още е в процес на работа, но в постоянно развитие. И ако се интересувате, можете да намерите повече информация тук, тук, и тук.

Ннамди Океке

Ннамди Океке

Ннамди Океке е компютърен ентусиаст, който обича да чете широка гама от книги. Той има предпочитания към Linux пред Windows/Mac и използва
Ubuntu от ранните си дни. Можете да го хванете в Twitter чрез бонготракс

Статии: 298

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

Технически тенденции, тенденции при стартиране, прегледи, онлайн приходи, уеб инструменти и маркетинг веднъж или два пъти месечно