
WebAssembly (Wasm) là một định dạng mã nhị phân hiệu suất cao, cho phép chạy mã gốc trên trình duyệt web với tốc độ gần như ứng dụng bản địa. Được thiết kế như một đích biên dịch (compilation target) cho các ngôn ngữ như C/C++, Rust, và Go, WebAssembly mở ra cánh cửa cho những ứng dụng web mà trước đây chỉ có thể thực hiện trên máy tính để bàn.
WebAssembly là gì?
WebAssembly là một ngôn ngữ lập trình thấp cấp, gần gũi với assembly, hoạt động như một máy ảo stack-based. Nó được phát triển bởi W3C với sự đóng góp từ Mozilla, Microsoft, Google, và Apple. WebAssembly không thay thế JavaScript mà bổ sung cho JavaScript — hai công nghệ này hoạt động song song để tận dụng ưu điểm của cả hai.

Kiến trúc cơ bản của WebAssembly cho phép mã được biên dịch từ nhiều ngôn ngữ khác nhau chạy trong cùng một runtime bên trong trình duyệt, bên cạnh engine JavaScript truyền thống.
Lịch sử phát triển
WebAssembly được công bố lần đầu vào năm 2015 và phát hành chính thức vào tháng 3 năm 2017. Đến ngày 5 tháng 12 năm 2019, WebAssembly trở thành khuyến nghị chính thức (W3C Recommendation). Năm 2021, WebAssembly nhận giải Programming Languages Software Award từ ACM SIGPLAN. Tiêu chuẩn hiện tại được duy trì với phiên bản 2.0 (2022).
Ngôn ngữ hỗ trợ
Hầu hết các ngôn ngữ lập trình phổ biến đều có ít nhất một mức hỗ trợ cho WebAssembly:
- C/C++: Emscripten là công cụ biên dịch chính, chuyển đổi mã C/C++ sang Wasm
- Rust: Hỗ trợ native thông qua cranelift và wasm-pack
- Go: Go 1.11+ hỗ trợ biên dịch sang WebAssembly
- .NET: Blazor cho phép chạy ứng dụng C# trong trình duyệt
- AssemblyScript: TypeScript-like ngôn ngữ biên dịch trực tiếp sang Wasm
Định dạng tệp
WebAssembly sử dụng hai định dạng chính:
| Định dạng | Mở rộng | Mô tả |
|---|---|---|
| Binary | .wasm | Định dạng nhị phân nén, tải nhanh hơn, thực thi hiệu quả hơn |
| Text | .wat | Định dạng văn bản dễ đọc, dùng để debug và phát triển |
Ứng dụng thực tế

WebAssembly được sử dụng rộng rãi trong nhiều lĩnh vực:
- Trò chơi trên web: Các engine như Unity và Unreal có thể xuất game chạy trực tiếp trên trình duyệt
- Chỉnh sửa ảnh/video: Adobe Photoshop và Premiere Pro hiện có phiên bản web nhờ Wasm
- Mô phỏng khoa học: Các phép tính phức tạp từ khoa học dữ liệu đến mô phỏng vật lý
- Cryptocurrency: Nhiều blockchain sử dụng Wasm cho smart contract runtime
- Công cụ phát triển: Các trình biên dịch và debugger hiện có trong trình duyệt nhờ Wasm
- Ứng dụng doanh nghiệp: Các phần mềm CRM, ERP được port sang web
Hiệu suất
WebAssembly đạt hiệu suất gần bản địa nhờ:
- Biên dịch ahead-of-time (AOT) thay vì interpretation
- Typed memory access không qua overhead của JavaScript
- Garbage collection được kiểm soát bởi ngôn ngữ nguồn, không phải runtime
- SIMD (Single Instruction Multiple Data) cho xử lý song song dữ liệu
- Threads cho phép xử lý song song trong WebAssembly
Các bài benchmark cho thấy WebAssembly thường đạt 70-80% hiệu suất của mã gốc, vượt xa JavaScript trong các tác vụ tính toán nặng. Đặc biệt, Wasm vượt trội trong các trường hợp sử dụng như:
- Xử lý ảnh và video thời gian thực
- Mô phỏng vật lý và khoa học
- Trò chơi 3D trên trình duyệt
- Các ứng dụng tài chính phức tạp
WASI: Mở rộng ra ngoài trình duyệt
WASI (WebAssembly System Interface) mở rộng WebAssembly ra ngoài trình duyệt, cho phép Wasm chạy trên server, edge computing, và IoT. WASI cung cấp quyền truy cập hệ thống tệp, mạng, và các tài nguyên khác một cách an toàn thông qua capability-based security. Với WASI, nhà phát triển có thể viết mã một lần và chạy trên mọi nền tảng — từ trình duyệt đến datacenter.
Tích hợp với JavaScript
WebAssembly được thiết kế để làm việc cùng JavaScript, không thay thế nó. Các điểm tích hợp chính bao gồm:
- Tải module Wasm qua JavaScript API
- Gọi hàm Wasm từ JavaScript và ngược lại
- Chia sẻ bộ nhớ linear giữa Wasm và JS
- Xử lý bất đồng bộ qua Promise và async/await
Một ứng dụng web thông thường sẽ có JavaScript xử lý logic giao diện người dùng, trong khi Wasm thực hiện các tác vụ tính toán nặng như xử lý tín hiệu, mã hoá video, hoặc mô phỏng khoa học.
An ninh
WebAssembly được thiết kế với an ninh như một ưu tiên hàng đầu:
- Chạy trong sandbox môi trường, không thể truy cập hệ thống mà không có cấp phép
- Bộ nhớ được cô lập nghiêm ngặt giữa các module
- Kiểm tra loại dữ liệu tại thời điểm biên dịch và runtime
- Không thể thực thi mã ngoài phạm vi được cho phép
Mặc dù có thể xảy ra lỗ hổng trong implementation, nhưng mô hình sandbox của Wasm cung cấp lớp bảo vệ mạnh mẽ hơn nhiều so với các plugin truyền thống như Flash hoặc Java Applets.
Kết luận
WebAssembly đang thay đổi cách chúng ta nghĩ về ứng dụng web. Từ game đến khoa học, từ DeFi đến edge computing, Wasm cung cấp nền tảng thống nhất để chạy mã hiệu suất cao trên mọi nền tảng. Khi WASI trưởng thành, ranh giới giữa web và native sẽ ngày càng mờ nhạt hơn. Với sự hỗ trợ từ tất cả các trình duyệt chính và cộng đồng phát triển hoạt động, WebAssembly chắc chắn sẽ đóng vai trò quan trọng trong tương lai của web development.
Tài liệu tham khảo: webassembly.org, MDN WebAssembly Guide, W3C WebAssembly Spec
