WebAssembly (WASM) for High Performance Apps · Pelajaran

WASM Sisi Server dengan Node.js

Integrasikan modul WebAssembly ke dalam aplikasi Node.js untuk logika sisi server dan layanan mikro berkinerja tinggi.

Pelajaran 1 dari 411 langkah

WASM Sisi Server dengan Node.js adalah pelajaran WebAssembly (WASM) for High Performance Apps gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar WebAssembly (WASM) for High Performance Apps, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus WebAssembly (WASM) for High Performance Apps mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

Server WASM with Node.js

Welcome! In this lesson, we'll explore how WebAssembly (WASM) isn't just for browsers. We'll learn to integrate high-performance WASM modules directly into Node.js applications.

This allows you to leverage WASM's speed for server-side logic, microservices, and computationally intensive tasks.

Benefits of WASM on Server

Why bring WASM to the server?

  • Performance: Execute near-native code for demanding tasks.
  • Portability: Run the same WASM module across different server environments.
  • Security: WASM's sandboxed environment offers enhanced security for untrusted code.
  • Language Agnostic: Write high-performance logic in C, C++, Rust, Go, and more, then run it in Node.js.

Node.js's WASM Support

Node.js has built-in support for WebAssembly, making it straightforward to load and execute WASM modules. It provides the same WebAssembly global object available in browsers.

This means you can use familiar JavaScript APIs to interact with your compiled WASM code.

Our First C Module

Let's start with a very simple C function. We'll compile this C code into a WebAssembly module.

This function will just add two integers, demonstrating basic interaction.

int add_numbers(int a, int b) {
  return a + b;
}

Compiling C to WASM

To turn our C code into a WASM module, we use a toolchain like Emscripten. The command would look something like this:

emcc my_module.c -o my_module.wasm -s EXPORTED_FUNCTIONS="['_add_numbers']"

This creates my_module.wasm, which contains our compiled add_numbers function, ready for Node.js!

Loading WASM File

First, we need to read the .wasm file from our file system. Node.js's fs module is perfect for this.

Assume my_module.wasm is in the same directory.

const fs = require('fs');
const path = require('path');

async function loadWasm() {
  // In a real scenario, 'my_module.wasm' would be a compiled file.
  // For this runnable example, we use a dummy path.
  const wasmPath = path.resolve(__dirname, 'dummy.wasm'); 
  
  try {
    const bytes = await fs.promises.readFile(wasmPath); 
    console.log('WASM bytes loaded! (if file existed)');
  } catch (error) {
    console.log('Dummy WASM file not found, proceeding...');
  }
}

loadWasm();

Instantiating the Module

Once we have the WASM bytes, we use WebAssembly.instantiate() to compile and instantiate the module. This gives us an instance object with access to exported functions.

For a runnable example, we'll use a very small, self-contained WASM binary that adds two numbers.

const fs = require('fs');

async function loadAndInstantiateWasm() {
  // A minimal WASM binary for 'add(a, b) => a + b'
  const wasmCode = new Uint8Array([
    0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, // WASM magic and version
    0x01, 0x07, 0x01, 0x60, 0x02, 0x7f, 0x7f, 0x01, 0x7f, // Type section: func(i32, i32) -> i32
    0x03, 0x02, 0x01, 0x00, // Function section: one function, type 0
    0x07, 0x07, 0x01, 0x03, 0x61, 0x64, 0x64, 0x00, 0x00, // Export section: export 'add' as func 0
    0x0a, 0x09, 0x01, 0x07, 0x00, 0x20, 0x00, 0x20, 0x01, 0x6a, 0x0b // Code section: get_local 0, get_local 1, i32.add
  ]);

  const { instance } = await WebAssembly.instantiate(wasmCode);
  console.log('WASM module instantiated!');
  // The 'instance' now holds our exported functions.
}

loadAndInstantiateWasm();

Calling Exported Functions

Now that our WASM module is instantiated, we can access its exported functions through instance.exports. Our WASM module exports an add function.

Let's call it and see the result!

const fs = require('fs');

async function callWasmFunction() {
  // A minimal WASM binary for 'add(a, b) => a + b'
  const wasmCode = new Uint8Array([
    0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, // WASM magic and version
    0x01, 0x07, 0x01, 0x60, 0x02, 0x7f, 0x7f, 0x01, 0x7f, // Type section: func(i32, i32) -> i32
    0x03, 0x02, 0x01, 0x00, // Function section: one function, type 0
    0x07, 0x07, 0x01, 0x03, 0x61, 0x64, 0x64, 0x00, 0x00, // Export section: export 'add' as func 0
    0x0a, 0x09, 0x01, 0x07, 0x00, 0x20, 0x00, 0x20, 0x01, 0x6a, 0x0b // Code section: get_local 0, get_local 1, i32.add
  ]);

  const { instance } = await WebAssembly.instantiate(wasmCode);
  const result = instance.exports.add(10, 20); // Calling the 'add' function
  console.log('Result from WASM:', result);
}

callWasmFunction();

Passing Primitive Data

As shown, passing primitive data types like integers (i32) between Node.js (JavaScript) and WASM is straightforward. WASM modules often use i32 for integers and f32/f64 for floats.

JavaScript numbers are 64-bit floats, but they are implicitly converted when passed to WASM functions expecting integer types.

WASM in Node.js Check

You've learned how to load and interact with a WASM module in Node.js. Let's test your understanding.

Server-Side WASM Recap

Great job! You've learned how to integrate WebAssembly modules into Node.js applications.

  • WASM brings high performance and portability to server-side logic.
  • Node.js provides native APIs (WebAssembly.instantiate) for loading and running WASM.
  • You can compile code from languages like C/C++ to WASM using tools like Emscripten.
  • Interacting with WASM functions and passing primitive data is direct and efficient.

This opens up exciting possibilities for building performant and flexible server applications!

Gratis untuk memulai

Belajar WebAssembly (WASM) for High Performance Apps dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
12
Pelajaran
48

Pertanyaan yang Sering Diajukan

Apakah pelajaran “WASM Sisi Server dengan Node.js” gratis?

Ya — teks lengkap “WASM Sisi Server dengan Node.js” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus WebAssembly (WASM) for High Performance Apps, upgrade ke CoddyKit PRO. Kursus WebAssembly (WASM) for High Performance Apps mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “WASM Sisi Server dengan Node.js”?

Integrasikan modul WebAssembly ke dalam aplikasi Node.js untuk logika sisi server dan layanan mikro berkinerja tinggi. Kamu berlatih WebAssembly (WASM) for High Performance Apps dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai WebAssembly (WASM) for High Performance Apps?

Tidak diperlukan pengalaman sebelumnya. WebAssembly (WASM) for High Performance Apps di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “WASM Sisi Server dengan Node.js” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran WebAssembly (WASM) for High Performance Apps ini?

Ya. Setiap pelajaran WebAssembly (WASM) for High Performance Apps menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. WASM Sisi Server dengan Node.js
  2. Fungsi Cloud & WASM Tanpa Server
  3. Sistem Tertanam & Komputasi Tepi
  4. Membangun Sistem Plugin yang Dapat Diperluas dengan WASM
← Kembali ke WebAssembly (WASM) for High Performance Apps