
WebAssembly (thường viết tắt là Wasm) là định dạng mã nhị phân được thiết kế để chạy gần bằng tốc độ gốc trên trình duyệt web. WebAssembly là gì và tại sao nó quan trọng với lập trình viên? Bài viết này sẽ giải thích kiến trúc, cách hoạt động và những ứng dụng thực tế của công nghệ đang thay đổi nền tảng web.
WebAssembly là gì?

WebAssembly là một định dạng lệnh nhị phân cho máy ảo dạng ngăn xếp, hoạt động như mục tiêu biên dịch di động cho các ngôn ngữ như C, C++ và Rust. Thay vì viết ứng dụng web bằng JavaScript, lập trình viên biên dịch mã nguồn sang file .wasm, sau đó trình duyệt tải và thực thi trực tiếp với hiệu suất gần bằng mã gốc.
Wasm được thiết kế với bốn mục tiêu chính: nhanh, an toàn, di động và tương thích. Các trình duyệt lớn đều hỗ trợ WebAssembly, từ Chrome, Firefox, Safari đến Edge, và phiên bản hiện tại của đặc tả là Wasm 3.0 do tổ chức W3C quản lý.
Cách WebAssembly hoạt động
Một module Wasm chạy bên cạnh JavaScript thay vì thay thế nó. Trình duyệt tải file .wasm, khởi tạo bằng API WebAssembly.instantiate, và chia sẻ vùng nhớ tuyến tính liên tục giữa hai ngôn ngữ. JavaScript có thể gọi các hàm được xuất từ module Wasm và ngược lại, tạo nên sự kết hợp linh hoạt.

Khác với JavaScript cần thông dịch hoặc biên dịch JIT, mã Wasm được tải và biên dịch nhanh hơn nhiều vì định dạng nhị phân đã được tối ưu. Cơ chế sandbox đảm bảo module không thể truy cập bộ nhớ ngoài vùng được cấp, mang lại tính an toàn cao cho người dùng.
Ngôn ngữ nào biên dịch được sang WebAssembly?
- Rust: Hệ sinh thái phát triển nhất với target wasm32-unknown-unknown và công cụ wasm-bindgen, được khuyên dùng cho các dự án mới.
- C và C++: Dùng Emscripten, trình biên dịch dựa trên LLVM đã tồn tại lâu nhất trong hệ sinh thái Wasm.
- Go: Hỗ trợ target WASI từ bản 1.21, đơn giản để build nhưng file nhị phân còn khá lớn.
- AssemblyScript: Ngôn ngữ giống TypeScript biên dịch trực tiếp sang .wasm, dễ tiếp cận với lập trình viên web.
- Kotlin và Swift: Đang trong quá trình phát triển hỗ trợ chính thức.
Ứng dụng thực tế của WebAssembly
Nhiều sản phẩm bạn dùng hằng ngày đã chạy Wasm mà không hề hay biết. Figma biên dịch toàn bộ phần lõi C++ của trình chỉnh sửa sang Wasm để chạy trên web. Photoshop phiên bản web dùng Wasm kết hợp SIMD cho các tác vụ xử lý ảnh nặng. Các game engine như Unity và Unreal Engine xuất bản bản dựng WebGL sang Wasm để chạy game ngay trong trình duyệt.
Trong lĩnh vực trí tuệ nhân tạo, ONNX Runtime Web hỗ trợ backend Wasm và WebGPU giúp chạy mô hình học máy ngay trên trình duyệt mà không cần máy chủ. Các phiên bản llama.cpp biên dịch sang Wasm cho phép chạy mô hình ngôn ngữ nhỏ ngay trên thiết bị của người dùng, mở ra hướng bảo mật và quyền riêng tư mới cho ứng dụng AI.

WebAssembly bên ngoài trình duyệt
Ngoài trình duyệt, WebAssembly đang mở ra những khả năng hoàn toàn mới cho ngành công nghệ phần mềm. Khả năng chạy mã biên dịch từ nhiều ngôn ngữ trên cùng một nền tảng đã thu hút sự chú ý của các công ty công nghệ lớn trên toàn thế giới.
WASI (WebAssembly System Interface) mở rộng Wasm ra ngoài trình duyệt, cung cấp các giao diện hệ thống cho file, mạng, đồng hồ và bộ đếm ngẫu nhiên. Nhờ WASI, các runtime như Wasmtime và Wasmer chạy module Wasm như ứng dụng native trên máy chủ.
Lĩnh vực điện toán biên đang là nơi Wasm phát triển mạnh nhất. Cloudflare Workers chạy JavaScript, Wasm và nhiều ngôn ngữ khác trên nền tảng V8 trải rộng hơn 330 thành phố, trong khi Fastly Compute chạy Wasm thuần túy. Cả hai đều có thời gian khởi động dưới một mili giây, lý tưởng cho các hàm serverless quy mô lớn.
Bắt đầu với WebAssembly
Cách nhanh nhất để làm quen là cài Rust và thêm target biên dịch bằng lệnh rustup target add wasm32-unknown-unknown, kết hợp wasm-bindgen để tạo liên kết với JavaScript. Tài liệu chính thức của Rust và WebAssembly tại rustwasm.github.io có hướng dẫn từng bước từ khởi tạo dự án đến chạy thử trong trình duyệt.
WebAssembly không thay thế JavaScript mà bổ sung cho nó những khả năng về hiệu suất mà ngôn ngữ kịch bản không làm được. Với hệ sinh thái đang phát triển nhanh, Wasm chắc chắn là kỹ năng đáng đầu tư cho lập trình viên web trong những năm tới.
