Node.js में WebAssembly और JavaScript का एकीकरण: पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

WebAssembly का परिचय और Node.js में इसकी भूमिका



WebAssembly (WASM) एक बाइनरी निर्देश प्रारूप है जो C, C++, Rust और अन्य भाषाओं में कोड को JavaScript वातावरण में नेटिव के करीब प्रदर्शन के साथ चलाने की अनुमति देता है। Node.js पारिस्थितिकी तंत्र में, WebAssembly अद्वितीय अवसर खोलता है: उच्च-प्रदर्शन कंप्यूटिंग से लेकर जटिल डेटा प्रोसेसिंग एल्गोरिदम चलाने तक, जो पहले व्याख्या की जाने वाली भाषाओं के लिए उपलब्ध नहीं थे।



इस लेख में, हम Node.js एप्लिकेशन में WebAssembly को एकीकृत करने का तरीका समझेंगे, WASM मॉड्यूल लोड करने और कॉल करने के व्यावहारिक उदाहरण देखेंगे, और प्रदर्शन अनुकूलन पर चर्चा करेंगे। आप सीखेंगे कि JavaScript में विकास की सरलता बनाए रखते हुए कोड के महत्वपूर्ण भागों को गति देने के लिए WASM का उपयोग कैसे करें।



Node.js में WebAssembly के साथ काम करने की मूल बातें



WASM मॉड्यूल का संकलन और लोड करना



पहला कदम WebAssembly बाइनरी फ़ाइल प्राप्त करना है। इसे आमतौर पर Emscripten के माध्यम से C/C++ से या wasm-pack के माध्यम से Rust से संकलित किया जाता है। Node.js के लिए, हम .wasm फ़ाइलों को सीधे fs.readFileSync या WebAssembly API के माध्यम से लोड कर सकते हैं।



module.wasm फ़ाइल से मॉड्यूल लोड करने का उदाहरण:



const fs = require('fs');const path = require('path');

async function loadWasmModule(filePath) { const wasmBuffer = fs.readFileSync(path.resolve(__dirname, filePath)); const wasmModule = await WebAssembly.instantiate(wasmBuffer); return wasmModule.instance.exports;}

// उपयोग(async () => { const wasm = await loadWasmModule('module.wasm'); console.log(wasm.add(5, 3)); // 8})();


ध्यान दें: हम WebAssembly.instantiate का उपयोग कर रहे हैं, जो निर्यात किए गए फ़ंक्शन के साथ एक ऑब्जेक्ट लौटाता है। वैकल्पिक तरीका WebAssembly.instantiateStreaming है, जो मॉड्यूल को स्ट्रीमिंग रूप से लोड करता है, जो बड़ी फ़ाइलों के लिए उपयोगी है।



फ़ंक्शन और पर्यावरण चर आयात करना



कभी-कभी WASM मॉड्यूल को JavaScript फ़ंक्शन (जैसे कंसोल आउटपुट या मेमोरी के साथ काम करने के लिए) आयात करने की आवश्यकता होती है। इसके लिए दूसरे पैरामीटर importObject का उपयोग किया जाता है:



const importObject = {    env: {        js_log: (msgPtr, len) => {            const msg = new TextDecoder().decode(                new Uint8Array(wasmMemory.buffer, msgPtr, len)            );            console.log(msg);        },        memory: new WebAssembly.Memory({ initial: 256 })    }};

async function loadWithImports() { const wasmBuffer = fs.readFileSync('module.wasm'); const wasmModule = await WebAssembly.instantiate(wasmBuffer, importObject); return wasmModule.instance.exports;}


यहां हम मेमोरी और js_log फ़ंक्शन पास कर रहे हैं, जिसे WASM कोड कॉल कर सकता है। यह दो वातावरणों के बीच बातचीत का मुख्य तंत्र है।



Node.js में WASM के उपयोग के व्यावहारिक उदाहरण



उदाहरण 1: उच्च-प्रदर्शन कंप्यूटिंग



मान लीजिए, हमारे पास C में एक फ़ंक्शन है जो फिबोनाची संख्याओं की गणना करता है:



// fibonacci.cint fib(int n) {    if (n <= 1) return n;    return fib(n-1) + fib(n-2);}


WASM में संकलन के बाद (Emscripten के माध्यम से: emcc fibonacci.c -o fibonacci.wasm -s WASM=1 -s EXPORTED_FUNCTIONS='["_fib"]') हम इसे Node.js से कॉल कर सकते हैं:



async function testFibonacci() {    const wasm = await loadWasmModule('fibonacci.wasm');    const n = 40;    console.time('WASM fib');    const result = wasm.fib(n);    console.timeEnd('WASM fib');    console.log(`Fib(${n}) = ${result}`);}

testFibonacci();


शुद्ध JavaScript कार्यान्वयन से तुलना करें - WASM संस्करण पुनरावर्ती गणनाओं के लिए 2-5 गुना तेज़ होगा।



उदाहरण 2: छवि प्रसंस्करण



WebAssembly पिक्सेल के साथ काम करने के लिए उपयुक्त है। आइए एक मॉड्यूल बनाएं जो छवि को ग्रेस्केल में बदलता है:



// grayscale.cvo                

ब्लॉग

पुस्तक अनुशंसाएँ