WebAssembly: znaczenie, zalety, przypadki użycia i więcej
Zafascynowany szumem dotyczącym WebAssembly, ale nie do końca pewien, co to jest? Oto najniższy poziom.

WebAssembly lub Wasm to format kodu binarnego służący do tworzenia programów, które można uruchamiać na dowolnej architekturze komputera.
System składa się z maszyny wirtualnej i kompilatora, który tłumaczy kod komputerowy z języków programowania, takich jak C czy C++, na czytelne dla człowieka formaty .wat i binarny .wasm.
Pierwotnym celem WebAssembly było umożliwienie programistom tworzenia wysokowydajnych aplikacji dla stron internetowych poprzez umożliwienie prędkości wykonywania zbliżonych do natywnych w przeglądarce. Wydaje się jednak, że obecnie technologia ta ewoluuje poza przeglądarki i wkracza w chmurę.
W tym przewodniku znajdziesz wszystko, co musisz wiedzieć o tej rozwijającej się technologii, jej mocnych i słabych stronach, a także o przyszłym potencjale.
Co to jest WebAssembly?
WebAssembly to format kodu binarnego działający na maszynie wirtualnej, do którego można kompilować różne języki. Został zaprojektowany jako przenośny i może działać w przeglądarce internetowej lub jako aplikacja serwerowa.
Wydany po raz pierwszy w 2017 r. moduł WebAssembly jest rekomendacją W3C od 2019 r. i jest obsługiwany przez wielu autorów, w tym Mozillę, Google, Microsoft, Red Hat i wielu innych.
Pierwotnym celem było opracowanie prędkości wykonywania zbliżonych do natywnych, jakie można znaleźć w aplikacjach C/C++ w przeglądarce. Ma to być także bezpieczny, otwarty standard, debuggowalny i pozbawiony wersji standard sieciowy, zgodny wstecz i zgodny z JavaScript.
Jak działa WebAssembly?
WebAssembly zaprojektowano jako silnik wykonawczy, taki jak Java lub JavaScript, który można osadzić w środowisku przeglądarki lub serwera w celu uruchamiania kodu komputerowego skompilowanego w formacie binarnym .wasm lub tekstowym .wat.
Aby napisać kod do wykonania zestawu WebAssembly, programista pisze program w dowolnym z wielu obsługiwanych języków. Następnie skompiluj go za pomocą kompilatora WebAssembly AOT (z wyprzedzeniem) lub JIT (w samą porę).
Ten kod może wykonać większość pracy w środowisku wykonawczym, ale nie może uzyskać dostępu do obiektów DOM przeglądarki ani modyfikować ich. Każda taka interakcja musi przejść przez JavaScript.
Jak utworzyć przykładową aplikację WebAssembly
Stworzenie prostej aplikacji Wasm na przeglądarkę internetową możliwe jest w kilku krokach, jak widać poniżej:
- Pobierz i zainstaluj SDK Emscriptena.
- Napisz swoją próbkę helloworld.c kod lub zrób to w C++/Rust, jeśli wolisz.
- Uruchom emcc helloworld.c -s WASM=1 -s helloworld.html w terminalu, aby skompilować kod do WebAssembly za pomocą Emscripten. Utworzy potrzebne pliki binarne Wasm, HTML i JavaScript (kod kleju).
- Wyświetlaj stronę helloworld.html za pośrednictwem przeglądarki internetowej.
Zalety zestawu WebAssembly
Istnieje wiele powodów, dla których warto zastosować WebAssembly i powiązane z nim technologie, obejmują one:
- Wydajność zbliżona do natywnej – WebAssembly ma tak niskopoziomową konstrukcję, że oferuje wydajność podobną do języków niskiego poziomu, takich jak C i C++.
- Ochrona – System zaprojektowano tak, aby był bezpieczny poprzez izolowanie go w środowisku wirtualnym z ograniczonym dostępem do systemu.
- Otwarty standard – Wiele organizacji i osób uczestniczy w tworzeniu WebAssembly i jest to oficjalna rekomendacja W3C.
- Lekki – WebAssembly kompiluje się do kodu binarnego, który ma być wykonany na maszynie wirtualnej. Ten kod jest przenośny i nie wymaga plików systemowych ani nie jest dostarczany z nimi.
- Obsługa wielu języków – Do zestawu WebAssembly można skompilować ponad 50 języków.
- Niezależny od platformy – Maszyna wirtualna WebAssembly została zaprojektowana dla każdej architektury tak, aby prezentowała to samo środowisko wykonawcze. Wszystko, co programista musi zrobić, to napisać kod dla WebAssembly.
Ograniczenia zestawu WebAssembly
- Praca w toku – Standard jest wciąż w fazie rozwoju, dlatego wiele funkcji i ulepszeń dopiero nadejdzie.
- Brak wywozu śmieci – W WebAssembly w dalszym ciągu brakuje modułu zbierania śmieci, choć być może wkrótce zostanie on zaimplementowany.
- Brak dostępu do DOM – Nie można uzyskać dostępu do DOM przeglądarki internetowej bezpośrednio z WebAssembly, konieczne będzie przejście przez JavaScript.
WebAssembly kontra Java
Java jest w pewnym sensie najwcześniejszą implementacją WebAssembly. Został zaprojektowany jako język, który można jednorazowo zapisać i uruchamiać w dowolnym miejscu, ale po drodze pojawiło się wiele problemów.
Podobnie jak w przypadku Java, WebAssembly używa RE (środowiska wykonawczego) do wykonywania swojego kodu, ale w przeciwieństwie do Java, możesz pisać WebAssembly w wybranym przez siebie języku.
WebAssembly kontra JavaScript
WebAssembly działa w przeglądarce lub innym środowisku hosta, podobnie jak JAVASCRIPT. Jeśli jednak JavaScript jest dostarczany do środowiska wykonawczego w formacie tekstowym i kompilowany na czas, WebAssembly ma zarówno format tekstowy, jak i binarny.
Wewnątrz przeglądarek internetowych JavaScript ma dostęp do DOM, podczas gdy WebAssembly nie. Jednakże, jeśli chodzi o szybkość wykonywania, WebAssembly bije JavaScript dzięki szybkości wykonywania kodu zbliżonej do natywnej.
Szybkość jest tym, co wyróżnia WebAssembly i powodem, dla którego jest idealny do tak wielu zastosowań. Możesz załadować WebAssembly do przeglądarki za pomocą JavaScript, a oba kody mogą działać razem i udostępniać zasoby.
WebAssembly kontra Docker kontra Kubernetes
Docker i Kubernetes to dwie popularne technologie, które napędzają przetwarzanie w chmurze. Docker to technologia kontenerowa, która umożliwia programistom spakowanie aplikacji ze wszystkimi jej zależnościami systemowymi w jeden pakiet. Ułatwia to wdrożenie aplikacji w dowolnym środowisku chmurowym w ciągu sekundy lub krócej.
Z drugiej strony Kubernetes to system typu open source do zarządzania i wdrażania aplikacji kontenerowych, takich jak Docker, CRI-O, Containerd i dowolna implementacja Kubernetes CRI (Container Runtime Interface). Kubernetes ułatwia także skalowanie wdrożeń w chmurze na wielu serwerach lub maszynach wirtualnych.
Z tego punktu widzenia WebAssembly jest bardziej podobny do Dockera i można go uruchomić jako kontenerową aplikację w chmurze przy użyciu Kubernetes. Oferuje także wiele zalet w stosunku do Dockera, ale prawdopodobnie go nie zastąpi.
Poza przeglądarką
Na początku były serwery internetowe. Trzeba było przeznaczyć całą maszynę na serwer. Następnie istniały maszyny wirtualne, czyli maszyny wirtualne, które umożliwiały działanie serwera na tylko jednym lub większej liczbie wątków procesora. Mimo to trzeba było mieć dedykowaną maszynę wirtualną.
Chmura obliczeniowa umożliwiło uruchamianie i uruchamianie serwerów tylko wtedy, gdy jest to potrzebne, poprzez konteneryzację aplikacji. Doprowadziło to do obniżenia kosztów, ponieważ płaciłeś tylko za to, z czego korzystasz – koniec z dedykowanymi maszynami. Ale nadal jest kilka problemów.
Po pierwsze, pliki dokera mogą mieć kilka gigabajtów, a to oznacza niewielkie opóźnienie w uruchomieniu i inne problemy z zarządzaniem. Jednakże podobny plik Wasm może mieć tylko kilka MB, ponieważ jest to wstępnie skompilowany plik binarny. Zapewnia to znacznie krótszy czas uruchamiania niż Docker, co jest idealne w przypadku niektórych aplikacji, w których czas jest krytyczny.
Po drugie, konstrukcja WebAssembly oznacza, że programista nie musi zarządzać i przydzielać zasobów systemowych, może po prostu przejść do rzeczy, używając wybranego przez siebie języka programowania.
Te funkcje sprawiają, że WebAssembly idealnie nadaje się do uruchamiania mikrousług w chmurze, chociaż aplikacje Docker są nadal preferowane w przypadku aplikacji wymagających większej kontroli nad środowiskiem operacyjnym i systemem plików.
Aby uzyskać więcej informacji, projekty takie jak WasmCloud oraz WasmEdge rozwijają WebAssembly w realną platformę obliczeniową.
Przypadki użycia Wasm
Istnieje wiele przypadków użycia WebAssembly, biorąc pod uwagę jego specyficzny charakter. Można je podzielić na trzy główne grupy; w przeglądarce, poza przeglądarką i konfiguracje hybrydowe.
Typ w przeglądarce jest oczywisty, a poza przeglądarką odnosi się głównie do wdrożeń na serwerach, IoT i w chmurze, podczas gdy hybryda odnosi się do połączenia tych dwóch.
Poniżej znajduje się spojrzenie na przypadki użycia, w których Wasm może się wyróżniać:
- Już istniejący kod o wysokiej wydajności – Stary, ale wspaniały kod, który możesz po prostu przenieść do WebAssembly.
- Nowy kod o wysokiej wydajności – Te, które trzeba zaprojektować i wdrożyć od podstaw.
- Przenoszenie aplikacji desktopowych do Internetu – Może to otworzyć drogę do powstania nowego typu rozwiązań internetowych dla komputerów stacjonarnych, takich jak edycja wideo w internecie.
- Chmura obliczeniowa – Współpraca z Dockerem i Kubernetesem w poszukiwaniu nowych możliwości.
Poniżej znajduje się przegląd konkretnych zastosowań i scenariuszy, w których Wasm może się wyróżniać:
- Edycja wideo i obrazów
- Design gry
- Aplikacje AI
- Aplikacje rzeczywistości wirtualnej i rozszerzonej
- Aplikacje muzyczne
- Aplikacje P2P
- Aplikacje po stronie serwera
- Obliczenia chmur/klastrów
- Projektowanie wspomagane komputerowo
- Symulacja platformy systemu operacyjnego
- Szyfrowanie
- Lokalny serwer WWW
- Aplikacje zdalnego pulpitu
- Wizualizacje naukowe
- Hybrydowe aplikacje natywne na smartfony
- Na urządzeniach IoT
Lista obsługiwanych języków i struktur
Do WebAssembly kompiluje się ponad 50 języków, a oto niektóre z najpopularniejszych:
- C
- C + +
- R
- Rubin
- Szybki
- Go
- Kotlin
- Rdza
- PHP
- marynarka – Framework dla programistów .NET.
- JwebAssembly – Kompilator kodu bajtowego Java i języków pokrewnych, takich jak JRuby, Jython, Groovy, Scala i Kotlin.
- Cis – Framework Rust do tworzenia wielowątkowych aplikacji internetowych przy użyciu WebAssembly.
- Skrypt asemblera – Język zaprojektowany specjalnie do tworzenia kodu WebAssembly.
- Ziarno – Silnie typowany język funkcjonalny.
- Motoko
Możesz znaleźć więcej języków w tym miejscu.
Lista środowisk wykonawczych i narzędzi zestawu WebAssembly
- Wszystkie główne przeglądarki obsługują Wasm
- Piodid – Środowisko uruchomieniowe Pythona w przeglądarce ze stosem naukowym Pythona, w tym Pandas, NumPy, SciPy.
- Wamira
- waga – W przypadku mikrousług i aplikacji internetowych
- Czy byłem – Modułowy interfejs systemu
- WasmTime – Szybkie i bezpieczne środowisko wykonawcze WebAssembly.
- Wasmer
- Świeci się
- wasmCloud – Środowisko chmurowe
- Krustlet – Kubernetes kublete do uruchamiania Wasma, napisany w Rust.
- WasmEdge – Środowisko wykonawcze w chmurze i na krawędzi
Wniosek
Dotarliśmy do końca naszej podróży po WebAssembly i jego możliwościach obliczeniowych. I jak widać, kryje w sobie wiele obietnic.
Jest to jednak wciąż praca w toku, ale w ciągłym rozwoju. A jeśli jesteś zainteresowany, możesz znaleźć więcej informacji w tym miejscu, w tym miejscu, w tym miejscu.





