
WebAssembly (viết tắt Wasm) là chuẩn mã nhị phân được thiết kế để chạy trên mọi trình duyệt hiện đại. Thay vì phân tích mã nguồn mỗi lần tải trang như JavaScript, trình duyệt giải mã một file nhị phân gọn nhẹ rồi biên dịch sang mã máy — nhanh hơn, an toàn hơn, và chạy được cả trong môi trường ngoài trình duyệt nhờ chuẩn WASI.
WebAssembly là gì
WebAssembly là một ngôn ngữ lập trình tầng trung (instruction set) được W3C và Ecma International đồng phát triển, dùng làm đích biên dịch cho C, C++, Rust, Go, AssemblyScript và nhiều ngôn ngữ khác. Mô hình thực thi: mã nguồn → biên dịch sang .wasm (một file nhị phân, thường nhỏ hơn nhiều) → trình duyệt xác thực và biên dịch Just-In-Time sang mã máy của CPU.
Lịch sử phiên bản đáng chú ý:
| Phiên bản | Ngày | Điểm mới |
|---|---|---|
| WebAssembly 1.0 | 5/12/2019 | W3C Recommendation — bản chuẩn đầu tiên |
| WebAssembly 2.0 | 20/3/2025 | +236 lệnh SIMD, bulk memory, multi-value, reference types |
| WebAssembly 3.0 | 17/9/2025 | Không gian địa chỉ 64-bit (i64), nhiều bộ nhớ, WasmGC, typed references, tail calls, exception handling |
Chi tiết từng phiên bản tại Wasm 2.0 và Wasm 3.0. Trạng thái spec tại webassembly.org/specs.

Tính năng chính và hỗ trợ trình duyệt
Điểm mạnh của WebAssembly nằm ở bộ tính năng ngày càng mở rộng, mỗi tính năng đều đã đạt hỗ trợ đồng nhất ba trình duyệt lớn. Bảng dưới đây tổng hợp từ dữ liệu tính năng chính thức:
| Tính năng | Chrome | Firefox | Safari |
|---|---|---|---|
| SIMD | 91 | 89 | 16.4 |
| Threads (SharedArrayBuffer) | 74 | 79 | 14.1 |
| Garbage collection (WasmGC) | 119 | 120 | 18.2 |
| Exception handling | 137 | 131 | 18.4 |
Một số điểm đáng chú ý về kiến trúc:
- Sandbox bắt buộc: mô hình bộ nhớ tuyến tính, không truy cập hệ thống file hay mạng trừ khi thông qua API được cấp quyền tường minh.
- WasmGC (WebAssembly 3.0): thu gom rác thay vì quản lý thủ công, giúp các ngôn ngữ như Rust chạy tự nhiên hơn.
- Component Model: lớp trừu tượng mới cho phép ghép nối các module Wasm với nhau và với hệ thống ngoài qua giao diện có kiểu (typed interfaces), không cần chuyển dữ liệu thô.

Hiệu năng và ứng dụng thực tế
Case study kinh điển nhất: Figma chuyển sang WebAssembly và cắt thời gian tải xuống hơn 3 lần (8/6/2017). Cùng bài viết cho biết mã nhị phân WebAssembly được thiết kế để giải mã nhanh khoảng 20 lần so với asm.js. Trình biên dịch phổ biến nhất là Emscripten (C/C++ → Wasm), bên cạnh Rust (wasm-pack), Go (GOOS=js GOARCH=wasm), AssemblyScript.
Các ứng dụng phổ biến hiện nay:
- Ứng dụng thiết kế: Figma, Canva, Google Earth dựa trên Wasm để xử lý canvas nặng.
- Công cụ web: AutoCAD chạy trên Web, Photoshop phiên bản web, Unity và Unreal Engine xuất bản sang WebAssembly.
- Xử lý dữ liệu: codec video, xử lý ảnh, phân tích số liệu lớn ngay trong trình duyệt.
- Mã nguồn mở: Python (Pyodide), Lua, SQLite, ImageMagick đều có bản Wasm chạy trong trình duyệt.
Tỷ lệ sử dụng thực tế vẫn khiêm tốn: báo cáo States of WebAssembly ghi nhận khoảng 0,35% trang desktop và 0,28% trang mobile (2025) dùng Wasm — cho thấy đây vẫn là công nghệ chuyên dụng, không phải lựa chọn mặc định. Cùng báo cáo ghi nhận file Wasm lớn nhất trong HTTP Archive đạt 228 MB.
WASI: chạy Wasm ngoài trình duyệt
WASI 0.2 (25/1/2024) là chuẩn runtime cho WebAssembly ngoài trình duyệt, dựa trên Component Model, bao gồm hai thế giới: wasi-cli (chạy công cụ dòng lệnh) và wasi-http (giao tiếp HTTP). Nhờ đó, cùng một file .wasm có thể chạy trong Node.js, Deno, Wasmtime, và container mà không cần biên dịch lại cho từng nền tảng.
WASI 0.3 đang trong giai đoạn preview bổ sung hỗ trợ bất đồng bộ (async), mở ra hướng lập trình WebAssembly với I/O bất đồng bộ. Xem wasi.dev.
So sánh WebAssembly với JavaScript
| Tiêu chí | WebAssembly | JavaScript |
|---|---|---|
| Loại | Chuẩn nhị phân (instruction set) | Ngôn ngữ script cấp cao |
| Biên dịch | AOT sang .wasm, sau đó JIT sang mã máy | Parse + JIT trực tiếp |
| Tốc độ khởi động | Nhanh hơn nhờ bỏ qua bước phân tích cú pháp | Chậm hơn với code lớn |
| Hiệu năng tính toán nặng | Gần bằng native code | Kém hơn 1–2 bậc |
| Bộ nhớ | Tuyến tính, sandbox | GC tự động, không sandbox |
| Hệ sinh thái | Rust, C, C++, Go, AssemblyScript | Toàn bộ frontend, npm |
Ưu và nhược điểm
Ưu điểm:
- Tốc độ gần native cho code tính toán nặng (xử lý ảnh, video, khoa học).
- Sandbox an toàn — mã Wasm không thể tự ý truy cập DOM, mạng hay hệ thống file.
- Nhị phân gọn, tải nhanh hơn trong nhiều trường hợp so với JS minify.
- Chạy được ngoài trình duyệt qua WASI — cùng binary cho mọi nền tảng.
- Không phụ thuộc thư viện ngoài, không cần cài runtime riêng.
Nhược điểm:
- Hệ sinh thái công cụ (debug, hot reload) kém trưởng thành hơn JS.
- Không có DOM trực tiếp — phải giao tiếp qua JavaScript, tạo thêm chi phí marshalling.
- Kích thước file nhị phân lớn với app lớn (một số file lên tới 228 MB).
- Tỷ lệ sử dụng thấp trên web nói chung — chưa phải lựa chọn mặc định.
- Debug stack trace khó đọc hơn JavaScript.
Khi nào nên dùng WebAssembly
- Ứng dụng web cần xử lý nặng (render 3D, xử lý ảnh/video, biên dịch code trong trình duyệt).
- Cần di chuyển code C/C++/Rust sẵn có lên web mà không viết lại bằng JS.
- Cần chạy cùng một logic server-side và client-side (Rust → cả WASM lẫy native).
- Plugin sandbox cho trình duyệt hoặc hệ thống nhúng — nhờ mô hình bộ nhớ tuyến tính.
- Không phù hợp cho UI logic đơn giản, animation CSS hay xử lý DOM nhiều.
Kết luận
WebAssembly đã trở thành công nghệ nền tảng cho ứng dụng web hiệu năng cao. Từ Recommendation đầu tiên của W3C năm 2019 đến Wasm 3.0 với WasmGC và Component Model, hệ sinh thái đã đủ trưởng thành để chọn cho các ứng dụng nặng như Figma, Photoshop web hay game engine. Hướng đang đi là kết hợp WASI cho serverless, kèm async trong WASI 0.3 — mở đường cho WebAssembly thoát khỏi giới hạn trình duyệt.
Từ khóa chính: WebAssembly, WASM, Emscripten, WASI, Rust, AssemblyScript, WasmGC, SIMD, sandbox, Figma, Component Model.
