Wczytywanie i uruchamianie WASM w JavaScript
Dowiedz się, jak wczytać skompilowany moduł WASM w przeglądarce internetowej za pomocą JavaScript i wywoływać jego eksportowane funkcje
Wczytywanie i uruchamianie WASM w JavaScript to bezpłatna lekcja WebAssembly (WASM) for High Performance Apps na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej WebAssembly (WASM) for High Performance Apps, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs WebAssembly (WASM) for High Performance Apps zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
Getting WASM into the Browser
Welcome! You've learned how to compile C/C++ code into a .wasm file. Now, it's time to bring that powerful WebAssembly module to life in your web browser.
This lesson will guide you through loading your .wasm module using JavaScript and invoking its functions.
Browser's WASM Gateway
Modern web browsers provide a global WebAssembly object. This object is your primary interface for interacting with WebAssembly modules.
- It allows you to compile, instantiate, and manage WASM code.
- We'll use its methods to fetch and load our
.wasmfile into the browser's runtime.
Streamlined WASM Loading
The most efficient way to load a WASM module from a network request is using WebAssembly.instantiateStreaming().
- It directly streams the raw bytes from the network response.
- It compiles and instantiates the module in one go, saving time and resources.
- This method expects a
Responseobject, typically obtained from thefetch()API.
Our Simple C Function
Let's assume we have a very basic C function that adds two numbers, like this one. This function will be compiled into add.wasm (as covered in the previous lesson) and then exported from the WASM module.
This export makes it callable directly from JavaScript.
/* add.c */
int add(int a, int b) {
return a + b;
}Fetching the .wasm File
Before we can instantiate our WASM module, we need to fetch the .wasm file itself. The standard fetch() API is perfect for this task.
It returns a Promise that resolves to a Response object, which we'll then pass to instantiateStreaming().
async function fetchWasmModule() {
const response = await fetch('add.wasm');
// Check if the request was successful
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
return response;
}Instantiating the WASM Module
The WebAssembly.instantiateStreaming() function takes the Response and returns a Promise. This Promise resolves to an object containing two important properties:
module: The compiled WebAssembly module itself.instance: An object representing the running instance of the module, which holds its exports.
async function loadAndInstantiate() {
const response = await fetch('add.wasm');
const wasmObject = await WebAssembly.instantiateStreaming(response);
console.log(wasmObject); // Shows { module: WebAssembly.Module, instance: WebAssembly.Instance }
return wasmObject.instance;
}Accessing Exported Functions
Once you have the instance object, you can access any functions or global variables that were exported from your WASM module. These are available through its exports property.
For our C add function, when compiled to WASM and exported, it will be accessible in JavaScript as instance.exports.add.
Full Example: Load & Call WASM
Here's a complete JavaScript code snippet. It fetches add.wasm, instantiates it, and then calls the exported add function with two numbers, logging the result.
This code would run inside a <script> tag in an HTML file.
async function runWasmAdder() {
try {
const response = await fetch('add.wasm');
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
const { instance } = await WebAssembly.instantiateStreaming(response);
// Call the exported 'add' function
const num1 = 15;
const num2 = 25;
const sum = instance.exports.add(num1, num2);
console.log(`${num1} + ${num2} = ${sum}`);
// Expected output: "15 + 25 = 40"
} catch (error) {
console.error("Error loading or running WASM:", error);
}
}
runWasmAdder();Inside the Instance Object
The instance object is your primary interface to the running WebAssembly module. It contains more than just exported functions:
instance.exports: An object holding all functions, globals, and memory exported by the WASM module.instance.module: A reference to the compiledWebAssembly.Moduleobject.instance.memory: If the WASM module uses memory, this provides access to its linear memory (anArrayBuffer).
Quick Check: WASM Loading
You've seen how to efficiently load and instantiate a WASM module. What is the key JavaScript function used for this purpose when streaming from a network request?
Recap: WASM in the Browser
Fantastic work! You've successfully learned how to bring your compiled WebAssembly modules to life in the browser. Here's what we covered:
- Using the global
WebAssemblyobject. - Efficiently loading with
WebAssembly.instantiateStreaming(). - Accessing exported functions via the
instance.exportsobject. - Calling WASM functions directly from JavaScript.
Now you can execute high-performance code right in your web applications!
Często zadawane pytania
Czy lekcja „Wczytywanie i uruchamianie WASM w JavaScript” jest bezpłatna?
Tak — pełny tekst „Wczytywanie i uruchamianie WASM w JavaScript” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu WebAssembly (WASM) for High Performance Apps, przejdź na CoddyKit PRO. Kurs WebAssembly (WASM) for High Performance Apps zawiera 4 lekcji w sumie.
Co nauczysz się w „Wczytywanie i uruchamianie WASM w JavaScript”?
Dowiedz się, jak wczytać skompilowany moduł WASM w przeglądarce internetowej za pomocą JavaScript i wywoływać jego eksportowane funkcje Ćwiczysz WebAssembly (WASM) for High Performance Apps z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć WebAssembly (WASM) for High Performance Apps?
Nie wymagamy żadnego doświadczenia. WebAssembly (WASM) for High Performance Apps w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Wczytywanie i uruchamianie WASM w JavaScript”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji WebAssembly (WASM) for High Performance Apps?
Tak. Każda lekcja WebAssembly (WASM) for High Performance Apps zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Kompilowanie C/C++ do WASM za pomocą Emscripten
- Wczytywanie i uruchamianie WASM w JavaScript
- Podstawowa wymiana danych: typy prymitywne
- Wywoływanie funkcji JavaScript z C/C++