একই-সাইট এনভায়রনমেন্টের মধ্যে WebAssembly মডিউল শেয়ার করা শুধুমাত্র একই-অরিজিনে সীমাবদ্ধ থাকবে।
একই-সাইট কিন্তু ক্রস-অরিজিন এনভায়রনমেন্টের মধ্যে WebAssembly (Wasm) মডিউল শেয়ার করার সুবিধা বন্ধ করে দেওয়া হবে যাতে এজেন্ট ক্লাস্টার দীর্ঘমেয়াদে অরিজিনের স্কোপে থাকে। যেসব ডেভেলপার এই ধরনের Wasm মডিউল ব্যবহার করছেন, তাদের নিশ্চিত করতে হবে যে Chrome 95-এর পরে সেগুলি ব্যবহার করা চালিয়ে যেতে একই-অরিজিনে সেই মডিউলগুলি ইনস্ট্যান্টিয়েট করা হয়েছে।
Wasm মডিউল কী এবং এটি কীভাবে কাজ করে
WebAssembly প্রোগ্রামগুলি মডিউলে সাজানো হয়, যা ডিপ্লয়মেন্ট, লোডিং এবং কম্পাইলেশনের ইউনিট।
নিম্নলিখিত উদাহরণ কোডে, https://iframe.site.example থেকে ইমপোর্ট করা একটি Wasm মডিউল
postMessage()-এর মাধ্যমে https://main.site.example-এর সাথে শেয়ার করা হয়। লক্ষ্য করুন যে এইসব ডোমেন হল একই-সাইট কিন্তু ক্রস-অরিজিন।
https://iframe.site.example-এ Wasm মডিউল:
(async () => {
const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();
Chrome 95 থেকে শুরু করে, প্রেরক এবং প্রাপক একই-উৎসের হতে হবে। উপরের
ক্ষেত্রে, https://iframe.site.example-কে https://main.site.example হতে হবে
অথবা এর উল্টোটা হতে হবে।
এটি কেন প্রয়োজন
Chrome ইন্টার্নালি বিভিন্ন ডকুমেন্ট, ট্যাব ও ফ্রেম সাইট-কীড এজেন্ট ক্লাস্টারে ম্যানেজ করছে। এর অর্থ হল, একই-সাইটের ডকুমেন্ট একই প্রসেসের মধ্যে ম্যানেজ করা হয় (এটি ঠিক কীভাবে কাজ করে তা ব্রাউজার অনুযায়ী আলাদা হয়)। সম্প্রতি, Chrome আরও সূক্ষ্ম ইউনিটে সেগুলি ম্যানেজ করা শুরু করেছে: অরিজিন। আমরা এটিকে origin-keyed agent clusters বলি। তবে, এটি করার জন্য অনেক রিসোর্স প্রয়োজন হয়, তাই origin-keyed এজেন্ট ক্লাস্টার শুধুমাত্র সীমিত সংখ্যক ওয়েবসাইটে হিউরিস্টিক্যালি প্রয়োগ করা হয়।
ডিফল্ট হিসেবে সব এজেন্ট ক্লাস্টারকে origin-keyed করার পরিকল্পনা করা হয়েছে। এটি করতে, আমাদের সেইসব ক্ষমতা সীমিত করতে হবে যেগুলির জন্য সাইট-কীড অরিজিন ক্লাস্টার প্রয়োজন:
- (শুধুমাত্র Chrome-এ) আপনি আর অন্য একই-সাইট ক্রস-অরিজিন পৃষ্ঠায়
SharedArrayBufferবাWebAssembly.Memoryঅবজেক্ট পাঠাতে পারবেন না। এটি Chrome 92 ভার্সন থেকে আগে থেকেই আছে। - আপনি আর
postMessage()-এর মাধ্যমে একই সাইটের অন্যান্য ক্রস-অরিজিন পৃষ্ঠায়WebAssembly.Moduleঅবজেক্ট পাঠাতে পারবেন না। এই পরিবর্তন নিচে আরও বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে.. - আপনি আর
document.domainসেট করতে পারবেন না। এটি একটি লিগ্যাসি ফিচার যা সাধারণত একই-সাইটের ক্রস-অরিজিন পৃষ্ঠাগুলিকে একে অপরের DOM-এ সিঙ্ক্রোনাসভাবে অ্যাক্সেস করার অনুমতি দেয়, কিন্তু origin-keyed agent clusters-এ, এটি বন্ধ করা থাকে।
উপরের সব পরিবর্তন করার মাধ্যমে, Chrome ডিফল্ট হিসেবে origin-keyed agent ক্লাস্টার ব্যবহার করতে শুরু করবে।
origin-keyed agent clusters সম্পর্কে আরও জানতে, Origin-Agent-Cluster হেডার সহ পারফর্ম্যান্স আইসোলেশনের অনুরোধ করা দেখুন।
পরবর্তী ধাপ ও রিসোর্স
ডিফল্ট হিসেবে Chrome-কে অরিজিন-কীড এজেন্ট ক্লাস্টারের সাথে কাজ করানোর জন্য, আমরা
document.domain-কে শুধুমাত্র পাঠযোগ্য করে তুলব। Chrome টিম ২০২২ সালের কোনও এক সময়ে এই পরিবর্তন
করার লক্ষ্য নিয়েছে।
Markus Winkler-এর তোলা ফটো Unsplash-এ