Casi d'Uso Reali
Applicazioni in Produzione
WebAssembly è già utilizzato da alcune delle applicazioni web più importanti al mondo. Ecco i casi d’uso più significativi.
Design e Grafica
Figma
Figma è probabilmente il caso di successo più famoso di Wasm. L’intero motore di rendering 2D è scritto in C++ e compilato a WebAssembly:
- Rendering vettoriale — Il motore grafico gestisce milioni di path vector in tempo reale
- Performance — 3x più veloce rispetto alla versione precedente in JavaScript
- Dimensione — Il modulo Wasm di Figma è circa 5MB (compresso)
AutoCAD Web
Autodesk ha portato AutoCAD sul web compilando il codebase C++ (30+ anni di sviluppo) a Wasm con Emscripten. Questo ha permesso di riutilizzare milioni di righe di codice senza riscriverle.
Photoshop Web
Adobe ha portato Photoshop sul browser grazie a Wasm ed Emscripten, permettendo l’uso di filtri, layer e strumenti complessi direttamente nel browser.
Gaming
Unity WebGL
Unity compila i giochi C# in C++ (tramite IL2CPP) e poi in Wasm. Migliaia di giochi Unity girano nel browser tramite WebAssembly:
- Angry Birds
- Temple Run
- Giochi didattici e simulazioni
Unreal Engine
Epic Games supporta il deploy WebAssembly per Unreal Engine, permettendo esperienze 3D nel browser.
Doom 3 / Quake
Port di motori di gioco classici (idTech) compilati da C/C++ a Wasm, dimostrando che anche giochi AAA possono girare nel browser.
Media e Codec
FFmpeg.wasm
FFmpeg, il toolkit multimediale più usato al mondo, è stato compilato a Wasm:
import { FFmpeg } from '@ffmpeg/ffmpeg';
const ffmpeg = new FFmpeg();
await ffmpeg.load();
await ffmpeg.writeFile('input.mp4', videoData);
await ffmpeg.exec(['-i', 'input.mp4', '-vf', 'scale=320:240', 'output.mp4']);
const data = await ffmpeg.readFile('output.mp4');
Casi d’uso: conversione video nel browser, estrazione audio, creazione GIF, tutto senza server.
Google Meet
Google usa Wasm per i filtri di sfondo nelle videochiamate — la segmentazione dell’immagine in tempo reale richiede performance che solo Wasm può garantire nel browser.
Database e Storage
SQLite in-Browser
SQLite è stato compilato a Wasm, permettendo database SQL completi nel browser:
import initSqlJs from 'sql.js';
const SQL = await initSqlJs();
const db = new SQL.Database();
db.run("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)");
db.run("INSERT INTO users VALUES (1, 'Mario')");
const result = db.exec("SELECT * FROM users");
DuckDB-Wasm
DuckDB, un database analitico OLAP, gira nel browser via Wasm per analisi dati su dataset di milioni di righe.
Machine Learning
ONNX Runtime Web
Microsoft ha compilato ONNX Runtime a Wasm per eseguire modelli di machine learning nel browser:
- Classificazione immagini
- Object detection
- Sentiment analysis
- Traduzione testo
TensorFlow.js con Wasm Backend
TensorFlow.js può usare un backend Wasm con SIMD per inferenza più veloce:
import * as tf from '@tensorflow/tfjs';
import '@tensorflow/tfjs-backend-wasm';
await tf.setBackend('wasm');
const model = await tf.loadLayersModel('model.json');
const prediction = model.predict(inputTensor);
Crittografia e Sicurezza
1Password
1Password usa Wasm per le operazioni crittografiche nel browser (derivazione chiavi, cifratura/decifratura) garantendo performance native per il vault delle password.
Signal Protocol
Implementazioni del protocollo Signal in Rust compilato a Wasm per messaging end-to-end encrypted direttamente nel browser.
Strumenti per Sviluppatori
Pyodide (Python nel Browser)
L’interprete CPython compilato a Wasm permette di eseguire Python nel browser:
const pyodide = await loadPyodide();
const result = pyodide.runPython(`
import numpy as np
np.mean([1, 2, 3, 4, 5])
`);
Stackblitz (WebContainers)
Stackblitz usa Wasm per eseguire Node.js direttamente nel browser, creando un ambiente di sviluppo completo senza server.
Compressione
Brotli e Zstd
Algoritmi di compressione compilati a Wasm per comprimere/decomprimere dati nel browser senza round-trip al server.
Geospaziale
Google Earth
Google Earth Web usa Wasm per il rendering 3D del globo terrestre, con texture ad alta risoluzione e navigazione fluida.
Pattern Comuni
La maggior parte dei casi d’uso reali condivide queste caratteristiche:
- Codice esistente in C/C++/Rust che viene portato al web
- Calcolo intensivo che sarebbe troppo lento in JavaScript
- Elaborazione real-time di immagini, audio o video
- Operazioni crittografiche che richiedono performance native
- Librerie consolidate che non ha senso riscrivere in JavaScript