WebAssembly
Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
WebAssembly jest nowym rodzajem języka, który może być uruchomiony w nowoczesnych wersjach przeglądarek — jest językiem niskopoziomowym, który działa z szybkością zbliżoną do rozwiązań natywnych i pozwala na kompilacje kodu napisanego w takich językach jak C/C++ do kodu docelowego, który może być użyty w web.
Równocześnie możemy w nim korzystać z Javascript.
W skrócie
WebAssembly ma duży wpływ na całą platformę web - dostarcza sposób na uruchomienie kodu napisanego w wielu różnych językach w przeglądarce z szybkością bliską natywnym rozwiązaniom, co wcześniej nie było możliwe do osiągnięcia.
WebAssembly jest stworzone do uzupełnienia JavaScript - używając WebAssembly JavaScript API, możesz załadować moduły WA do aplikacji JavaScript i współdzielić funkcjonalności. To pozwala Ci skorzystać jednocześnie z wydajności WebAssembly razem z prostotą i elastycznością JavaScript w jednej i tej samej aplikacji, nawet jeśli nie wiesz jak napisać kod WebAssembly.
Co więcej technolgia ta jest rozwijana jako web standard przez W3C WebAssembly Working Group z aktywnym udziałem największych firm technologicznych.
Przewodnik
- Koncepcja WebAssembly
- Rozpocznij od przeczytania ogólnej koncepcji stojącej za WebAssembly - co to jest, dlaczego jest przydatne, jak wpasowuje się w platformę web i jak z tego korzystać.
- Kompilacja z C/C++ do WebAssembly
- Kiedy już napisałeś kod w C/C++, możesz łatwo go skompilować do .wasm korzystając z narzędzi jak Emscripten. Sprawdźmy jak to działa.
- Ładowanie i uruchamianie kodu WebAssembly
- Kiedy już uzyskasz .wasm, ten artykuł pomoże Ci w jego pobraniu do aplikacji, kompilacji i łączeniu z Fetch lub XHR API.
- Cachowanie skompilowanych modułów WebAssembly
- Cachowanie dużych modułów WebAssembly po stronie klienckiej jest przydatne dla zwiększenia wydajności uruchamiania aplikacji. Artykuł opisuje jak osiągnąć to za pomocą IndexedDB.
- Korzystanie z WebAssembly JavaScript API
- Kiedy już załadujesz moduł .wasm do swojego projektu, będziesz chciał go użyć. Ten artykuł pokaże Ci jak używać modułów WA za pomocą WebAssembly JavaScript API.
- Wyeksportowane funkcje WebAssembly
- Wyeksportowane funkcje WebAssembly są odpowiednikiem zwykłych funkcji i pozwalają na wywołanie kodu WebAssembly wewnątrz JavaScript. Artykuł opisuje czym są i jak ich używać.
- Zrozumieć format tekstowy WebAssembly
- Artykuł tłumaczy format tekstowy wasm. Jest to niskopoziomowa tekstowa reprezentacja modułu .wasm pokazywana w przeglądarce w narzędziach developerskich przy debugowaniu.
- Konwersja formatu tekstowego WebAssembly do wasm
- Dowiesz się tutaj jak skonwertować moduł WebAssembly napisany w formacie tekstowym do modułu binarnego .wasm.
API
WebAssembly
(en-US)- Obiekt przestrzeni nazw dla wszystkich metod powiązanych z WebAssembly.
WebAssembly.Module
(en-US)- Obiekt
WebAssembly.Module
zawiera bezstanowy kod WebAssembly, który już został skompilowany przez przeglądarkę i może być skutecznie współdzielony z Workerami czy zachachowany w IndexedDB. WebAssembly.Instance
(en-US)- Obiekt
WebAssembly.Instance
jest stanową, wykonywalną instancją modułu. ObiektInstance
zawiera wyeksportowane funkcje WebAssembly, które pozwalają na wywołanie bezpośrednio w kodzie JavaScript. - A
WebAssembly.Instance
object is a stateful, executable instance of aModule
.Instance
objects contain all the Exported WebAssembly functions that allow calling into WebAssembly code from JavaScript. WebAssembly.instantiate()
(en-US)WebAssembly.instantiate()
jest główną metodą API służącą do kompilowania i tworzenia gotowych do użycia instancji kodu WebAssembly. ZwracaModule
orazInstance
.WebAssembly.Memory()
(en-US)WebAssembly.
Memory
jest obiektem zawierającym rozszerzalnyArrayBuffer
, który przechowuje bajty pamięci dostępnej dlaInstance
.WebAssembly.Table()
(en-US)WebAssembly.
Table
obiekt jest rozszerzalnymTypedArray
(en-US)WebAssembly.CompileError()
(en-US)- Tworzy nowy obiekt
CompileError
. WebAssembly.LinkError()
(en-US)- Tworzy nowy obiekt
LinkError
. WebAssembly.RuntimeError()
(en-US)- Tworzy nowy obiekt
RuntimeError
.
Przykłady
- WASMSobel
- Zobacz nasze repo webassembly-examples, aby zobaczyć inne przykłady.
Specyfikacja
Specyfikacja | Status | Komentarz |
---|---|---|
WebAssembly JavaScript Interface | Working Draft | Wstępna szkicowa definicja JavaScript API . |
Kompatybilność
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|---|
Basic support | 57 | 15[2] | 52 (52)[1] | No support | 44 | 11 |
Feature | Android Webview | Chrome for Android | Edge Mobile | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|
Basic support | 57 | 57 | No support | 52.0 (52)[1] | No support | No support | 11 |
[1] WebAssembly jest włączone w Firefox 52+, jednakże wyłączone w Firefox 52 Extended Support Release (ESR.)
[2] Currently supported behind the “Experimental JavaScript Features” flag. See this blog post for more details.