WebAssembly মেমোরি এবং JavaScript এর মধ্যে শেয়ার করা
WebAssembly (WASM) এবং JavaScript একে অপরের সাথে কাজ করতে পারে, তবে একে অপরের মেমোরি স্পেস শেয়ার করতে কিছু নির্দিষ্ট পদ্ধতির মাধ্যমে যোগাযোগ করতে হয়। WebAssembly নিজস্ব মেমোরি স্পেস ব্যবহার করে, যা JavaScript এর মেমোরির বাইরে থাকে, তবে আপনি JavaScript এবং WebAssembly এর মধ্যে ডেটা শেয়ার করতে পারবেন। এই প্রক্রিয়া মূলত WebAssembly মেমোরি ব্যবহার করে এবং Memory অবজেক্টের মাধ্যমে মেমোরি শেয়ার করা সম্ভব।
এই প্রক্রিয়ার মাধ্যমে আপনি JavaScript থেকে WebAssembly মেমোরি ম্যানিপুলেট করতে পারবেন এবং WebAssembly মডিউল থেকে JavaScript এর ডেটা এক্সেস করতে পারবেন।
1. WebAssembly মেমোরি তৈরি করা
WebAssembly মেমোরি তৈরি করা হয় WebAssembly.Memory অবজেক্টের মাধ্যমে, যা JavaScript থেকে ব্যবহৃত হয়। এটি একটি ArrayBuffer হিসেবে কাজ করে, যার মধ্যে WebAssembly মডিউল ডেটা সঞ্চয় করতে পারে।
এখানে একটি WebAssembly মেমোরি তৈরি করার উদাহরণ দেওয়া হলো:
const memory = new WebAssembly.Memory({ initial: 1, maximum: 2 });এখানে:
initial: মেমোরির প্রাথমিক সাইজ (অবশ্যই পৃষ্ঠাগুলির সংখ্যায়, প্রতিটি পৃষ্ঠা 64KB)।maximum: মেমোরির সর্বাধিক সীমা।
এটি WebAssembly মডিউলের জন্য একটি নতুন মেমোরি স্পেস তৈরি করে যা 1 পৃষ্ঠার সমান সাইজের হবে।
2. WebAssembly মেমোরি এবং JavaScript এর মধ্যে শেয়ার করা
WebAssembly মেমোরি এবং JavaScript এর মধ্যে ডেটা শেয়ার করতে, আপনাকে JavaScript থেকে WebAssembly.Memory অবজেক্টের মাধ্যমে মেমোরি অ্যাক্সেস করতে হবে। নিম্নলিখিত উদাহরণটি দেখানো হচ্ছে যেখানে JavaScript এবং WebAssembly একে অপরের মধ্যে মেমোরি শেয়ার করছে।
2.1 C কোড (WebAssembly জন্য)
প্রথমে, WebAssembly কোড (C ভাষায়) লিখে সেটিকে JavaScript এর সাথে শেয়ার করা যাবে।
#include <stdio.h>
extern "C" {
int shared_data[10]; // একটি অ্যারে যা JavaScript এবং WebAssembly দ্বারা শেয়ার হবে
void set_data(int index, int value) {
shared_data[index] = value; // মেমোরি শেয়ার করা হচ্ছে
}
int get_data(int index) {
return shared_data[index]; // শেয়ার করা ডেটা রিটার্ন
}
}এখানে shared_data অ্যারে JavaScript এবং WebAssembly উভয়ের জন্য শেয়ার করা হবে। এই অ্যারের মাধ্যমে JavaScript এবং WebAssembly একে অপরের মধ্যে ডেটা পাঠাতে পারে।
2.2 WebAssembly কোড কম্পাইল করা
এটি Emscripten ব্যবহার করে .wasm ফরম্যাটে কম্পাইল করা হবে:
emcc shared_data.c -o shared_data.html -s EXPORTED_FUNCTIONS="['_set_data', '_get_data']" -s EXTRA_EXPORTED_RUNTIME_METHODS="['ccall', 'cwrap']"এই কমান্ডটি WebAssembly কোডটি কম্পাইল করবে এবং .html, .wasm ফাইল তৈরি করবে।
3. JavaScript এবং WebAssembly এর মধ্যে ডেটা শেয়ার করা
এখন, JavaScript এবং WebAssembly এর মধ্যে শেয়ার করা ডেটা ব্যবহার করতে হবে। এটি করতে আমরা WebAssembly.instantiate ব্যবহার করব।
3.1 JavaScript কোড
// WebAssembly মেমোরি তৈরি
const memory = new WebAssembly.Memory({ initial: 1, maximum: 2 });
// WebAssembly মডিউল লোড করা
fetch('shared_data.wasm')
.then(response => response.arrayBuffer())
.then(bytes => WebAssembly.instantiate(bytes, {
env: {
memory: memory,
// এখানে WebAssembly কোড থেকে ব্যবহারযোগ্য JavaScript ফাংশন ডিফাইন করতে পারেন
}
}))
.then(results => {
const instance = results.instance;
// WebAssembly এর set_data ফাংশন কল করা
instance.exports.set_data(0, 42); // index 0 তে value 42 সেট করা
// WebAssembly এর get_data ফাংশন কল করা
const value = instance.exports.get_data(0);
console.log("Data from WebAssembly: ", value); // আউটপুট হবে: Data from WebAssembly: 42
// JavaScript থেকে WebAssembly মেমোরি অ্যাক্সেস
const buffer = new Int32Array(memory.buffer);
console.log("Shared data in JavaScript: ", buffer[0]); // আউটপুট হবে: 42
})
.catch(console.error);3.2 ব্যাখ্যা:
- WebAssembly.Memory: একটি মেমোরি স্পেস তৈরি করা হয়েছে যা JavaScript এবং WebAssembly উভয়ের মধ্যে শেয়ার করা হচ্ছে।
- WebAssembly.instantiate(): এটি WebAssembly মডিউল লোড করে এবং মেমোরি ডিফাইন করে যা ব্রাউজারে এক্সিকিউট হবে।
- set_data এবং get_data ফাংশন: WebAssembly মডিউল থেকে JavaScript এ ডেটা পাঠানো এবং প্রাপ্ত করার জন্য ব্যবহার করা হয়েছে।
4. মেমোরি অ্যাক্সেস এবং শেয়ারিং
- JavaScript এবং WebAssembly একে অপরের মধ্যে ডেটা শেয়ার করতে ArrayBuffer বা Typed Arrays ব্যবহার করা হয়।
- JavaScript এর
Int32Arrayবা অন্য কোনো টাইপ ব্যবহার করে আপনি WebAssembly মেমোরির মধ্যে রাখা ডেটাকে অ্যাক্সেস এবং ম্যানিপুলেট করতে পারেন। - এটি ব্যবহৃত হতে পারে গ্রাফিক্স, গাণিতিক কাজ বা অন্যান্য পারফরম্যান্স-সংবেদনশীল কাজগুলিতে, যেখানে মেমোরি শেয়ার করার মাধ্যমে দ্রুত পারফরম্যান্স অর্জন করা সম্ভব।
সারসংক্ষেপ
- WebAssembly মেমোরি এবং JavaScript মেমোরি একে অপরের সাথে শেয়ার করতে
WebAssembly.Memoryঅবজেক্ট ব্যবহার করা হয়। - JavaScript এর
ArrayBufferবাTypedArraysদিয়ে আপনি WebAssembly মেমোরিতে থাকা ডেটাকে অ্যাক্সেস করতে পারেন। - JavaScript এবং WebAssembly উভয়ের মধ্যে সহজে ডেটা পাঠানো এবং গ্রহণ করা সম্ভব, যা পারফরম্যান্স-সংবেদনশীল অ্যাপ্লিকেশনগুলির জন্য উপকারী।
Read more