0Pricing
WebAssembly (WASM) for High Performance Apps · レッスン

JavaScriptでのWASMの読み込みと実行

JavaScriptを使ってコンパイル済みのWASMモジュールをWebブラウザに読み込み、エクスポートされた関数を呼び出す方法を学びます

「JavaScriptでのWASMの読み込みと実行」はCoddyKit上の無料WebAssembly (WASM) for High Performance Appsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはWebAssembly (WASM) for High Performance Apps学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 WebAssembly (WASM) for High Performance Appsコースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

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 .wasm file 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 Response object, typically obtained from the fetch() 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 compiled WebAssembly.Module object.
  • instance.memory: If the WASM module uses memory, this provides access to its linear memory (an ArrayBuffer).

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 WebAssembly object.
  • Efficiently loading with WebAssembly.instantiateStreaming().
  • Accessing exported functions via the instance.exports object.
  • Calling WASM functions directly from JavaScript.

Now you can execute high-performance code right in your web applications!

よくある質問

「JavaScriptでのWASMの読み込みと実行」レッスンは無料ですか?

はい。「JavaScriptでのWASMの読み込みと実行」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、WebAssembly (WASM) for High Performance Appsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 WebAssembly (WASM) for High Performance Appsコースには全4レッスンが含まれています。

「JavaScriptでのWASMの読み込みと実行」で何を学びますか?

JavaScriptを使ってコンパイル済みのWASMモジュールをWebブラウザに読み込み、エクスポートされた関数を呼び出す方法を学びます ブラウザで直接実行するハンズオンコードでWebAssembly (WASM) for High Performance Appsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

WebAssembly (WASM) for High Performance Appsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのWebAssembly (WASM) for High Performance Appsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「JavaScriptでのWASMの読み込みと実行」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このWebAssembly (WASM) for High Performance Appsレッスンでコードを書いて実行できますか?

はい。すべてのWebAssembly (WASM) for High Performance Appsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. EmscriptenによるC/C++からWASMへのコンパイル
  2. JavaScriptでのWASMの読み込みと実行
  3. 基本的なデータ交換:プリミティブ型
  4. C/C++からJavaScript関数を呼び出す
← WebAssembly (WASM) for High Performance Appsに戻る