# Rust và WebAssembly năm 2026: Hướng dẫn Wasm, wasm-bindgen và Câu hỏi Phỏng vấn > Hướng dẫn Rust WebAssembly với wasm-pack và wasm-bindgen. Học cách xây dựng, tối ưu hóa và kiểm thử module Wasm với các ví dụ thực tế. - Published: 2026-08-07 - Updated: 2026-08-07 - Author: SharpSkill - Reading time: 5 min --- Rust WebAssembly (Wasm) mang lại hiệu năng gần như native cho các ứng dụng web bằng cách biên dịch mã Rust thành định dạng nhị phân có thể chạy trong trình duyệt và môi trường server. Sự kết hợp giữa đảm bảo an toàn bộ nhớ của Rust với thực thi sandbox của WebAssembly tạo nền tảng vững chắc cho các thành phần web hiệu năng cao, từ xử lý hình ảnh đến các phép toán mã hóa. > **Điểm Chính** > > Rust biên dịch sang WebAssembly thông qua `wasm-pack` và `wasm-bindgen`, tạo ra các module mà JavaScript có thể import và gọi trực tiếp. Quy trình làm việc bao gồm viết hàm Rust, thêm annotation `#[wasm_bindgen]`, biên dịch thành `.wasm`, và import mã glue JavaScript được tạo ra vào bất kỳ ứng dụng web nào. ## Thiết lập Rust cho Phát triển WebAssembly Toolchain Rust yêu cầu target `wasm32-unknown-unknown` và `wasm-pack` để xây dựng các module WebAssembly. Các công cụ này tự động xử lý biên dịch, tối ưu hóa và tạo binding JavaScript. ```bash # install-wasm-tools.sh # Add the WebAssembly target to rustup rustup target add wasm32-unknown-unknown # Install wasm-pack for building and packaging cargo install wasm-pack # Verify installation wasm-pack --version ``` Sau khi cài đặt, tạo một library crate mới được cấu hình cho đầu ra WebAssembly. File `Cargo.toml` yêu cầu các thiết lập cụ thể để tương thích với Wasm. ```toml # Cargo.toml [package] name = "wasm-calculator" version = "0.1.0" edition = "2024" [lib] crate-type = ["cdylib", "rlib"] [dependencies] wasm-bindgen = "0.2.100" [profile.release] opt-level = "z" # Optimize for size lto = true # Link-time optimization ``` Loại crate `cdylib` tạo ra thư viện động phù hợp cho WebAssembly. Các tối ưu hóa profile release giảm đáng kể kích thước file `.wasm` cuối cùng—thường từ 50% trở lên so với các bản build không được tối ưu. ## Hiểu về wasm-bindgen và Tương tác JavaScript Crate [wasm-bindgen](https://rustwasm.github.io/docs/wasm-bindgen/) kết nối Rust và JavaScript bằng cách tự động tạo các binding type-safe. Các hàm được đánh dấu với `#[wasm_bindgen]` có thể được gọi từ JavaScript, trong khi các hàm JavaScript có thể được import vào Rust. ```rust // src/lib.rs use wasm_bindgen::prelude::*; // Export this function to JavaScript #[wasm_bindgen] pub fn fibonacci(n: u32) -> u32 { // Base cases for recursion match n { 0 => 0, 1 => 1, // Recursive calculation with tail-call optimization _ => fibonacci(n - 1) + fibonacci(n - 2), } } // Import console.log from JavaScript #[wasm_bindgen] extern "C" { #[wasm_bindgen(js_namespace = console)] fn log(s: &str); } // Export a function that uses console.log #[wasm_bindgen] pub fn greet(name: &str) { log(&format!("Hello, {}!", name)); } ``` Khối `extern "C"` khai báo các hàm JavaScript mà mã Rust có thể gọi. Thuộc tính `js_namespace` chỉ định đối tượng JavaScript chứa hàm đó. Binding hai chiều này cho phép tích hợp liền mạch giữa logic Rust và API JavaScript. ## Xây dựng và Đóng gói Module WebAssembly Lệnh `wasm-pack build` biên dịch Rust sang WebAssembly và tạo mã wrapper JavaScript. Các target khác nhau phù hợp với các môi trường JavaScript khác nhau. ```bash # build-wasm.sh # Build for bundlers like webpack, Vite, or Rollup wasm-pack build --target bundler --release # Build for native ES modules (browser) wasm-pack build --target web --release # Build for Node.js wasm-pack build --target nodejs --release ``` Mỗi target tạo ra đầu ra khác nhau trong thư mục `pkg/`. Target bundler hoạt động với các bundler JavaScript hiện đại hỗ trợ ES modules và import WebAssembly. Target web tạo ra mã có thể tải trực tiếp trong trình duyệt qua `