WebAssembly (Wasm) 2026 में प्रायोगिक से उत्पादन-तैयार हो गया है। ब्राउज़र, सर्वर (WASI के माध्यम से), और एज कंप्यूटिंग सभी Wasm चलाते हैं। कंपोनेंट मॉडल को अंतिम रूप देने और प्रमुख भाषाओं (रस्ट, गो, पायथन, सी++) के साथ वासम लक्ष्यों का समर्थन करने के साथ, “एक बार लिखें, कहीं भी चलाएं” का वादा अंततः प्रदर्शन-महत्वपूर्ण कोड के लिए वास्तविक है। यह मार्गदर्शिका बुनियादी बातों से लेकर उत्पादन परिनियोजन तक सब कुछ कवर करती है।
📋 Table of Contents
वेबअसेंबली क्यों?
- लगभग मूल प्रदर्शन– देशी सी की तुलना में 1.5x-2x धीमी, सीपीयू-गहन कार्यों के लिए जावास्क्रिप्ट की तुलना में 10-100x तेज
- भाषा सुवाह्यता– ब्राउज़र या सर्वर में रस्ट, सी/सी++, गो कोड चलाएं
- सुरक्षा सैंडबॉक्सिंग– सख्त क्षमता-आधारित सुरक्षा मॉडल
- WASI (वेबअसेंबली सिस्टम इंटरफ़ेस)– ब्राउज़र के बाहर वासम चलाएं (सर्वर, एज, सीएलआई)
- घटक मॉडल– सभी भाषाओं में इंटरऑपरेबल मॉड्यूल
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)
जावास्क्रिप्ट/टाइपस्क्रिप्ट में वास्म का उपयोग करना
// 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: ब्राउज़र के बाहर WebAssembly
// 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
पायथन से वेबअसेंबली (पायोडाइड)
<!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 का उपयोग कब करें
- सीपीयू-गहन कार्य: छवि/वीडियो प्रोसेसिंग, क्रिप्टोग्राफी, एमएल अनुमान
- पोर्ट देशी पुस्तकालय: FFmpeg, OpenCV, SQLite से ब्राउज़र तक
- एज कंप्यूटिंग: क्लाउडफ्लेयर वर्कर्स, तेजी से गणना करें
- प्लगइन सिस्टम: अविश्वसनीय कोड को सुरक्षित रूप से चलाएं (Wasm सैंडबॉक्स)
- गेम इंजन: एकता, गोडोट वासम को संकलित करें
के लिए वास्म का उपयोग न करें: DOM हेरफेर, सरल CRUD ऐप्स, कोड जहां JS का प्रदर्शन पहले से ही ठीक है।
2026 में WebAssembly एक गंभीर उत्पादन तकनीक है। रस्ट + वास्म-पैक ब्राउज़र वास्म के लिए सबसे अच्छा मार्ग है, WASI सर्वर-साइड और एज परिनियोजन को सक्षम बनाता है, और कंपोनेंट मॉडल भाषा इंटरऑप को वास्तविकता बना रहा है। सीपीयू-गहन समस्या से शुरुआत करें जिसे जावास्क्रिप्ट धीरे-धीरे संभालता है – प्रदर्शन लाभ निवेश को स्पष्ट कर देगा।
🔗 Share this article
✍️ Leave a Comment