WebAssembly: Hochperformanter Code im Browser | Enjyn Gruppe
Hallo Welt
Hallo Welt
Original Lingva Deutsch
Übersetzung wird vorbereitet...
Dieser Vorgang kann bis zu 60 Sekunden dauern.
Diese Seite wird erstmalig übersetzt und dann für alle Besucher gespeichert.
0%
DE Zurück zu Deutsch
Übersetzung durch Lingva Translate

235 Dokumentationen verfügbar

Wissensdatenbank

WebAssembly Einfuehrung

Zuletzt aktualisiert: 20.01.2026 um 10:05 Uhr

WebAssembly: Hochperformanter Code im Browser

WebAssembly ermöglicht near-native Performance im Web. Lernen Sie die Grundlagen und Einsatzmöglichkeiten von WASM.

Was ist WebAssembly?

WebAssembly (WASM) ist ein binäres Instruktionsformat
für eine stack-basierte virtuelle Maschine.

Eigenschaften:
- Kompiliertes Binärformat (nicht interpretiert)
- Near-native Geschwindigkeit
- Läuft in allen modernen Browsern
- Sicher (Sandbox)
- Kann aus C, C++, Rust, Go kompiliert werden

Vergleich: JavaScript vs WebAssembly

Aspekt JavaScript WebAssembly
Performance JIT-kompiliert Near-native
Startup Schneller (klein) Langsamer (Parsing)
DOM-Zugriff Direkt Über JS Bridge
Speicher Garbage Collected Linear Memory
Debugging Einfach Komplexer

Use Cases

# Wann WebAssembly nutzen?

✅ CPU-intensive Berechnungen
   - Bildverarbeitung
   - Video-Encoding/Decoding
   - 3D-Rendering
   - Physik-Simulationen

✅ Bestehender C/C++/Rust Code
   - Legacy-Bibliotheken portieren
   - Spiele-Engines

✅ Kryptographie
   - Hashing, Verschlüsselung

# Wann NICHT?

❌ Einfache DOM-Manipulation
❌ Kleine Scripts
❌ I/O-lastige Operationen

Rust zu WebAssembly

# Rust installieren
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# WASM Target hinzufügen
rustup target add wasm32-unknown-unknown

# wasm-pack installieren
cargo install wasm-pack

# Neues Projekt
cargo new --lib wasm-example
cd wasm-example
// Cargo.toml
[package]
name = "wasm-example"
version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["cdylib"]

[dependencies]
wasm-bindgen = "0.2"
// src/lib.rs
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub fn fibonacci(n: u32) -> u32 {
    match n {
        0 => 0,
        1 => 1,
        _ => fibonacci(n - 1) + fibonacci(n - 2)
    }
}

#[wasm_bindgen]
pub fn greet(name: &str) -> String {
    format!("Hallo, {}!", name)
}
# Kompilieren
wasm-pack build --target web

# Erzeugt:
# pkg/
#   wasm_example_bg.wasm
#   wasm_example.js
#   package.json

Im Browser verwenden

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WASM Demo</title>
</head>
<body>
    <script type="module">
        import init, { fibonacci, greet } from './pkg/wasm_example.js';

        async function run() {
            await init();

            // Funktionen aufrufen
            console.log(greet('Welt'));      // "Hallo, Welt!"
            console.log(fibonacci(10));       // 55

            // Performance-Test
            console.time('WASM fibonacci(40)');
            console.log(fibonacci(40));
            console.timeEnd('WASM fibonacci(40)');
        }

        run();
    </script>
</body>
</html>

AssemblyScript (TypeScript-ähnlich)

# Installation
npm init -y
npm install --save-dev assemblyscript

# Projekt initialisieren
npx asinit .
// assembly/index.ts
export function add(a: i32, b: i32): i32 {
    return a + b;
}

export function factorial(n: i32): i32 {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}
# Kompilieren
npm run asbuild

# Verwendung
import { add, factorial } from './build/release.js';
console.log(add(5, 3));        // 8
console.log(factorial(5));     // 120

WASM mit JavaScript laden (Vanilla)

// Methode 1: fetch + instantiate
async function loadWasm() {
    const response = await fetch('module.wasm');
    const bytes = await response.arrayBuffer();
    const { instance } = await WebAssembly.instantiate(bytes);

    return instance.exports;
}

// Methode 2: instantiateStreaming (effizienter)
async function loadWasmStreaming() {
    const { instance } = await WebAssembly.instantiateStreaming(
        fetch('module.wasm')
    );

    return instance.exports;
}

// Verwendung
const wasm = await loadWasm();
console.log(wasm.add(2, 3));

Speicher teilen zwischen JS und WASM

// WASM Memory erstellen
const memory = new WebAssembly.Memory({
    initial: 1,     // 1 Page = 64KB
    maximum: 10
});

// In WASM importieren
const importObject = {
    env: {
        memory: memory
    }
};

const { instance } = await WebAssembly.instantiateStreaming(
    fetch('module.wasm'),
    importObject
);

// Daten schreiben
const view = new Uint8Array(memory.buffer);
view[0] = 42;

// WASM kann jetzt auf view[0] zugreifen

Bestehende WASM-Bibliotheken

# Bildverarbeitung
npm install @aspect/image

# SQL im Browser
npm install sql.js

# PDF-Generierung
npm install @aspect/pdfkit

# Video-Processing
# ffmpeg.wasm

# Kryptographie
npm install @aspect/argon2
⚠️ Beachten: WebAssembly hat keinen direkten DOM-Zugriff. Für UI-Interaktionen müssen Sie über JavaScript gehen. WASM ist optimal für Berechnungen, nicht für DOM-Manipulation.

Weitere Informationen

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
120