WebAssembly और JavaScript के साथ काम करना: Node.js में A से Z तक

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

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

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

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

\n\n

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

\n\n

इस लेख में, हम Node.js में WebAssembly के साथ काम करने के पूरे चक्र को कवर करेंगे: स्रोत कोड के संकलन से लेकर JavaScript एप्लिकेशन में तैयार मॉड्यूल के एकीकरण तक।

\n\n

मूल अवधारणाएँ और वातावरण तैयार करना

\n\n

शुरू करने से पहले क्या जानना चाहिए

\n

WebAssembly मॉड्यूल एक बाइनरी फ़ाइल है जिसका एक्सटेंशन .wasm है। इसकी DOM या फ़ाइल सिस्टम तक सीधी पहुँच नहीं है - सभी इंटरैक्शन "आयातित फ़ंक्शन" के माध्यम से होते हैं जिन्हें आप JavaScript से पास करते हैं। Node.js में, यह सीमा विशेष रैपरों की मदद से हटा दी जाती है।

\n\n

उपकरण स्थापित करना

\n

कोड को WASM में कंपाइल करने के लिए हमें Emscripten SDK की आवश्यकता है। Linux/macOS पर स्थापना:

\n
git clone https://github.com/emscripten-core/emsdk.git\ncd emsdk\n./emsdk install latest\n./emsdk activate latest\nsource ./emsdk_env.sh
\n\n

Rust प्रोजेक्ट्स के लिए, wasm-pack का उपयोग करें:

\n
npm install -g wasm-pack
\n\n

पहला WASM मॉड्यूल बनाना और कंपाइल करना

\n\n

C में उदाहरण - जोड़ फ़ंक्शन

\n

आइए C में एक सरल फ़ंक्शन बनाएँ जो दो संख्याओं को जोड़ता है:

\n
// math.c\n#include <emscripten.h>\n\nEMSCRIPTEN_KEEPALIVE\nint add(int a, int b) {\n    return a + b;\n}\n\nEMSCRIPTEN_KEEPALIVE\nint multiply(int a, int b) {\n    return a * b;\n}
\n\n

Emscripten का उपयोग करके WASM में कंपाइल करें:

\n
emcc math.c -o math.js -s EXPORTED_FUNCTIONS="['_add', '_multiply']" -s WASM=1 -s MODULARIZE=1 -s EXPORT_NAME="createMathModule"
\n\n

आउटपुट में हमें दो फ़ाइलें मिलती हैं: math.wasm और math.js - लोड करने के लिए एक रैपर।

\n\n

Node.js में मॉड्यूल लोड करना

\n

अब JavaScript में मॉड्यूल का उपयोग करें:

\n
// index.js\nconst createMathModule = require('./math.js');\n\ncreateMathModule().then(module => {\n    const add = module._add;\n    const multiply = module._multiply;\n\n    console.log('5 + 3 =', add(5, 3));        // 8\n    console.log('4 * 7 =', multiply(4, 7));  // 28\n});
\n\n

चलाएँ:

\n
node index.js
\n\n

मेमोरी और जटिल डेटा प्रकारों के साथ काम करना

\n\n

स्ट्रिंग और ऐरे पास करना

\n

WASM केवल संख्याओं के साथ काम करता है। स्ट्रिंग या ऐरे पास करने के लिए, मॉड्यूल की रैखिक मेमोरी में मेमोरी आवंटित करनी होती है। आइए C में एक उदाहरण देखें जो एक स्ट्रिंग लेता है और उसकी लंबाई लौटाता है:

\n
// string_ops.c\n#include <string.h>\n#include <emscripten.h>\n\nEMSCRIPTEN_KEEPALIVE\nint string_length(char* str) {\n    return strlen(str);\n}\n\nEMSCRIPTEN_KEEPALIVE\nvoid to_upper(char* str) {\n    for (int i = 0; str[i]; i++) {\n        if (str[i] >= 'a' && str[i] <= 'z') {\n            str[i] -= 32;\n        }\n    }\n}
\n\n

कंपाइल करें:

\n
emcc string_ops.c -o string_ops.js -s EXPORTED_FUNCTIONS="['_string_length', '_to_upper']" -s WASM=1 -s MODULARIZE=1 -s EXPORT_NAME="createStringModule"
\n\n

मेमोरी के साथ काम करने के लिए JavaScript कोड:

\n
const createStringModule = require('./string_ops.js');\n\ncreateStringModule().then(module => {\n    const { _string_length, _to_upper, heap } = module;\n    \n    // स्ट्रिंग के लिए मेमोरी आवंटित करें\n    const input = "hello world";\n    const ptr = module._malloc(input.length + 1);\n    \n    // स्ट्रिंग को WASM मेमोरी में कॉपी करें\n    for (let i = 0; i < input.length; i++) {\n        heap[i + ptr] = input.charCodeAt(i);\n    }\n    heap[ptr + input.len                

ब्लॉग

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