WebAssembly หรือ WASM คือเทคโนโลยีที่เปลี่ยนโลกของเว็บแอป ด้วยการนำโค้ดระดับ system มารันในเบราว์เซอร์ได้อย่างรวดเร็ว! และ Rust คือหนึ่งในภาษาที่รองรับ WASM ได้อย่างดีเยี่ยม
บทความนี้จะพาคุณเข้าใจภาพรวมของ WebAssembly, วิธีเขียนโปรแกรม Rust สำหรับเบราว์เซอร์ และแนวทางการ deploy พร้อมตัวอย่างใช้งานจริง
WebAssembly คืออะไร?
- WebAssembly (WASM) เป็นรูปแบบไบนารี (binary) ที่รันในเบราว์เซอร์ได้
- ถูกออกแบบมาให้ เร็ว, ปลอดภัย และเป็น sandbox
- รองรับโดยเบราว์เซอร์หลักทั้งหมด เช่น Chrome, Firefox, Safari, Edge
- สามารถเขียนด้วยภาษาระดับล่าง เช่น Rust, C, C++
ทำไม Rust จึงเหมาะกับ WASM?
- Rust ควบคุม memory ได้อย่างละเอียด
- ไม่มี garbage collector = ประสิทธิภาพสูง
- รองรับ toolchain อย่างเป็นทางการ เช่น
wasm-bindgen
และwasm-pack
เป้าหมายของ Rust+WASM
- เขียนส่วนที่ต้องการ performance สูงด้วย Rust
- เชื่อมต่อกับ JavaScript ได้อย่างไร้รอยต่อ
- รัน Rust ใน frontend ได้อย่างปลอดภัย
ติดตั้งเครื่องมือ
# ติดตั้ง target wasm rustup target add wasm32-unknown-unknown # ติดตั้ง wasm-pack cargo install wasm-pack
สร้างโปรเจกต์ WASM
wasm-pack new wasm_demo cd wasm_demo
โครงสร้างโปรเจกต์ที่ได้:
wasm_demo/ ├── Cargo.toml ├── src/ │ └── lib.rs ├── pkg/ └── README.md
แก้ไข lib.rs
use wasm_bindgen::prelude::*; /// ฟังก์ชันนี้จะถูกเรียกจาก JS #[wasm_bindgen] pub fn add(a: i32, b: i32) -> i32 { a + b }
Build เป็น WASM
wasm-pack build --target web
คุณจะได้โฟลเดอร์ pkg/
ที่มีไฟล์ WASM และ JS glue code
ใช้งานใน HTML/JavaScript
<!DOCTYPE html> <html> <head><title>Rust + WASM</title></head> <body> <script type="module"> import init, { add } from "./pkg/wasm_demo.js"; async function run() { await init(); console.log("1 + 2 =", add(1, 2)); } run(); </script> </body> </html>
Deploy แบบ Static
- ใช้
basic-http-server
หรือvite
เพื่อ serve ไฟล์ - หรือ deploy ผ่าน GitHub Pages, Cloudflare Pages ได้ทันที
npm install -g serve serve .
กรณีต้องการเชื่อมกับ DOM
ใช้ web-sys
และ wasm-bindgen
use wasm_bindgen::prelude::*; use web_sys::console; #[wasm_bindgen(start)] pub fn run() { console::log_1(&"Hello from Rust!".into()); }
Debug Rust WASM
- เปิด DevTools เพื่อดู log
- สามารถใช้
console_error_panic_hook
เพื่อจับ panic
ข้อดีของ Rust กับ WASM
- Performance สูงมากเมื่อเทียบกับ JS
- โค้ดสามารถ reuse ได้ในหลาย platform
- ปลอดภัย เพราะไม่มี undefined behavior
ข้อเสีย
- ต้อง build และ deploy ก่อนใช้งาน
- ยังต้องเขียน JS ในบางส่วน เช่น DOM access
กรณีศึกษา
- Figma ใช้ WASM เพื่อ render UI ด้วย Rust
- Dropbox ใช้ Rust+WASM เพื่อ encode/decode ไฟล์
บทสรุป
Rust กับ WebAssembly คือการจับคู่ที่ลงตัวสำหรับการเขียนเว็บแอปที่ เร็ว, เบา, ปลอดภัย ในยุคที่ความเร็วของ frontend เป็นหัวใจหลัก
ถ้าคุณเขียน Rust อยู่แล้ว หรือมองหาวิธีดึง performance ในเบราว์เซอร์ — WASM คือเทคโนโลยีที่ไม่ควรมองข้าม
เขียน Rust หนึ่งครั้ง ใช้งานได้ทั้งบนเว็บ, native, embedded — โลกทั้งใบคือ platform ของคุณ!