WebAssembly (Wasm) 2026 সালে পরীক্ষামূলক থেকে উৎপাদনের জন্য প্রস্তুত হয়েছে। ব্রাউজার, সার্ভার (WASI এর মাধ্যমে), এবং এজ কম্পিউটিং সবই Wasm চালায়। কম্পোনেন্ট মডেল চূড়ান্ত করা এবং প্রধান ভাষাগুলি (Rust, Go, Python, C++) Wasm লক্ষ্যগুলিকে সমর্থন করে, “একবার লিখুন, যে কোনও জায়গায় চালান” প্রতিশ্রুতিটি কার্যক্ষমতা-সমালোচনামূলক কোডের জন্য অবশেষে বাস্তব। এই নির্দেশিকাটি মৌলিক থেকে উৎপাদন স্থাপনা পর্যন্ত সবকিছুই কভার করে।
📋 Table of Contents
কেন WebAssembly?
- কাছাকাছি-নেটিভ পারফরম্যান্স— নেটিভ সি-এর চেয়ে 1.5x-2x ধীর, CPU-নিবিড় কাজের জন্য জাভাস্ক্রিপ্টের চেয়ে 10-100x দ্রুত
- ভাষা বহনযোগ্যতা– ব্রাউজার বা সার্ভারে মরিচা, C/C++, গো কোড চালান
- নিরাপত্তা স্যান্ডবক্সিং– কঠোর ক্ষমতা-ভিত্তিক নিরাপত্তা মডেল
- WASI (ওয়েব অ্যাসেম্বলি সিস্টেম ইন্টারফেস)– ব্রাউজারের বাইরে Wasm চালান (সার্ভার, প্রান্ত, CLI)
- কম্পোনেন্ট মডেল– ভাষা জুড়ে ইন্টারঅপারেবল মডিউল
WebAssembly মরিচা
# Install wasm-pack
cargo install wasm-pack
# Add wasm target
rustup target add wasm32-unknown-unknown
# Create a Wasm library
cargo new --lib fast_crypto
cd fast_crypto
# Cargo.toml
[lib]
crate-type = ["cdylib"]
[dependencies]
wasm-bindgen = "0.2"
getrandom = { version = "0.2", features = ["js"] }
sha2 = "0.10"
hex = "0.4"
[profile.release]
opt-level = 3
lto = true
codegen-units = 1
// src/lib.rs
use wasm_bindgen::prelude::*;
use sha2::{Sha256, Digest};
#[wasm_bindgen]
pub fn hash_sha256(data: &str) -> String {
let mut hasher = Sha256::new();
hasher.update(data.as_bytes());
hex::encode(hasher.finalize())
}
#[wasm_bindgen]
pub fn fibonacci(n: u32) -> u64 {
if n <= 1 { return n as u64; }
let mut a = 0u64;
let mut b = 1u64;
for _ in 2..=n {
(a, b) = (b, a.wrapping_add(b));
}
b
}
// Struct exposed to JavaScript
#[wasm_bindgen]
pub struct ImageProcessor {
width: u32,
height: u32,
pixels: Vec<u8>,
}
#[wasm_bindgen]
impl ImageProcessor {
#[wasm_bindgen(constructor)]
pub fn new(width: u32, height: u32) -> Self {
Self { width, height, pixels: vec![0u8; (width * height * 4) as usize] }
}
pub fn grayscale(&mut self) {
for chunk in self.pixels.chunks_mut(4) {
let gray = (0.299 * chunk[0] as f32 + 0.587 * chunk[1] as f32 + 0.114 * chunk[2] as f32) as u8;
chunk[0] = gray; chunk[1] = gray; chunk[2] = gray;
}
}
pub fn pixels(&self) -> *const u8 {
self.pixels.as_ptr()
}
}
# Build for browser
wasm-pack build --target web
# Generated:
# pkg/
# fast_crypto_bg.wasm
# fast_crypto.js (JS bindings)
# fast_crypto.d.ts (TypeScript types)
JavaScript/TypeScript এ Wasm ব্যবহার করা
// Using wasm-pack generated bindings
import init, { hash_sha256, fibonacci, ImageProcessor } from './pkg/fast_crypto.js';
async function main() {
// Must initialize Wasm module first
await init();
// Call Wasm functions directly
const hash = hash_sha256("Hello, WebAssembly!");
console.log("SHA256:", hash);
const fib = fibonacci(50);
console.log("Fibonacci(50):", fib);
// Use Wasm class
const processor = new ImageProcessor(800, 600);
processor.grayscale();
// Performance comparison
console.time("wasm-hash");
for (let i = 0; i < 100000; i++) hash_sha256(`test${i}`);
console.timeEnd("wasm-hash");
}
// Using with Next.js (server-side safe)
// next.config.js:
// experimental: { serverComponentsExternalPackages: ['fast_crypto'] }
WASI: ব্রাউজারের বাইরে ওয়েব অ্যাসেম্বলি
// Run Rust-compiled Wasm on servers via Wasmtime
use std::io::{self, Read};
fn main() {
let mut input = String::new();
io::stdin().read_to_string(&mut input).unwrap();
let processed = process_data(&input);
println!("{}", processed);
}
fn process_data(data: &str) -> String {
data.to_uppercase()
}
# Compile to WASI target
rustup target add wasm32-wasi
cargo build --target wasm32-wasi --release
# Run with Wasmtime (server-side Wasm runtime)
wasmtime target/wasm32-wasi/release/myapp.wasm < input.txt
# Docker with Wasm (Docker+Wasm integration)
docker run --runtime=io.containerd.wasmtime.v1 --platform=wasi/wasm myapp:latest
Python থেকে WebAssembly (Pyodide)
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/pyodide/v0.26.0/full/pyodide.js"></script>
</head>
<body>
<script>
async function runPython() {
const pyodide = await loadPyodide();
// Install packages
await pyodide.loadPackage(["numpy", "pandas"]);
// Run Python code
const result = await pyodide.runPythonAsync(`
import numpy as np
arr = np.random.rand(1000000)
arr.mean()
`);
console.log("Mean:", result);
}
runPython();
</script>
</body>
</html>
এজ এ ওয়াসম (ক্লাউডফ্লেয়ার ওয়ার্কার)
// wrangler.toml
// [build]
// command = "cargo install -q worker-build && worker-build --release"
// src/worker.rs compiled to Wasm and deployed to Cloudflare edge
// Handle 50M+ requests/day with sub-millisecond cold starts
// Worker JS + Wasm bundle
import { hash_sha256 } from './pkg/fast_crypto.js';
import wasm from './pkg/fast_crypto_bg.wasm';
export default {
async fetch(request) {
await wasm();
const body = await request.text();
const hash = hash_sha256(body);
return new Response(JSON.stringify({ hash }), {
headers: { 'Content-Type': 'application/json' }
});
}
};
কখন WebAssembly ব্যবহার করবেন
- CPU- নিবিড় কাজ: ইমেজ/ভিডিও প্রসেসিং, ক্রিপ্টোগ্রাফি, এমএল ইনফারেন্স
- পোর্ট নেটিভ লাইব্রেরি: FFmpeg, OpenCV, SQLite থেকে ব্রাউজার
- এজ কম্পিউটিং: ক্লাউডফ্লেয়ার কর্মী, দ্রুত গণনা করুন
- প্লাগইন সিস্টেম: নিরাপদে অবিশ্বস্ত কোড চালান (Wasm স্যান্ডবক্স)
- গেম ইঞ্জিন: একতা, গডট কম্পাইল টু ওয়াসম
এর জন্য Wasm ব্যবহার করবেন না: DOM ম্যানিপুলেশন, সাধারণ CRUD অ্যাপস, কোড যেখানে JS পারফরম্যান্স ইতিমধ্যেই ঠিক আছে।
2026 সালে WebAssembly একটি গুরুতর উত্পাদন প্রযুক্তি। রাস্ট + ওয়াসম-প্যাক হল ব্রাউজার ওয়াসমের সর্বোত্তম পথ, WASI সার্ভার-সাইড এবং এজ ডিপ্লয়মেন্ট সক্ষম করে এবং কম্পোনেন্ট মডেল ভাষা ইন্টারপকে বাস্তবে পরিণত করছে। একটি CPU-নিবিড় সমস্যা দিয়ে শুরু করুন যা জাভাস্ক্রিপ্ট ধীরে ধীরে পরিচালনা করে — কর্মক্ষমতা লাভ বিনিয়োগকে স্পষ্ট করে তুলবে।
🔗 Share this article
✍️ Leave a Comment