একই-অরিজিনে Wasm মডিউল শেয়ারিং সীমাবদ্ধ করা

একই-সাইট পরিবেশের মধ্যে একটি WebAssembly মডিউল ভাগ করে নেওয়া শুধুমাত্র একই-উৎপত্তিতে সীমাবদ্ধ থাকবে।

একই-সাইট কিন্তু ক্রস-অরিজিন এনভায়রনমেন্টের মধ্যে একটি WebAssembly (Wasm) মডিউল শেয়ার করাকে অবহেলিত করা হবে যাতে এজেন্ট ক্লাস্টারগুলিকে দীর্ঘমেয়াদে উৎপত্তির সুযোগ দেওয়া যায়। যে সমস্ত বিকাশকারীরা Wasm মডিউলগুলি এইভাবে ব্যবহার করছেন তাদের অবশ্যই Chrome 95 এর পরে ব্যবহার করা চালিয়ে যেতে একই-অরিজিনে সেই মডিউলগুলিকে ইনস্ট্যান্টিয়েট করতে হবে।

Wasm মডিউল কি এবং তারা কিভাবে কাজ করে

WebAssembly প্রোগ্রামগুলিকে মডিউলগুলিতে সংগঠিত করা হয়, যা স্থাপনা, লোডিং এবং সংকলনের একক।

নিম্নলিখিত উদাহরণ কোডে, https://iframe.site.example থেকে আমদানি করা একটি Wasm মডিউল https://main.site.example এর সাথে postMessage() এর মাধ্যমে শেয়ার করা হয়েছে। লক্ষ্য করুন এই ডোমেইনগুলি একই-সাইট কিন্তু ক্রস-অরিজিন

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) আপনি আর SharedArrayBuffer বা WebAssembly.Memory অবজেক্ট অন্যান্য একই-সাইট ক্রস-অরিজিন পৃষ্ঠাগুলিতে পাঠাতে পারবেন না। এটি ইতিমধ্যেই Chrome 92 থেকে চালু আছে
  • আপনি আর WebAssembly.Module অবজেক্ট পাঠাতে পারবেন না postMessage() মাধ্যমে অন্য একই-সাইট ক্রস-অরিজিন পৃষ্ঠাগুলিতে। এই পরিবর্তনটি নীচে আরও বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে..
  • আপনি আর document.domain সেট করতে পারবেন না। এটি একটি লিগ্যাসি বৈশিষ্ট্য যা সাধারণত একই-সাইটের ক্রস-অরিজিন পৃষ্ঠাগুলিকে একে অপরের DOM-এ সিঙ্ক্রোনাসভাবে অ্যাক্সেস করার অনুমতি দেয়, কিন্তু অরিজিন-কিড এজেন্ট ক্লাস্টারগুলিতে এটি অক্ষম করা হয়।

উপরের সমস্ত পরিবর্তনগুলিকে সম্বোধন করে, Chrome ডিফল্টরূপে অরিজিন-কিড এজেন্ট ক্লাস্টার ব্যবহার করতে চলে যাবে৷

অরিজিন-কিড এজেন্ট ক্লাস্টার সম্পর্কে আরও জানতে, অরিজিন-এজেন্ট-ক্লাস্টার শিরোনামের সাথে কর্মক্ষমতা বিচ্ছিন্নতার অনুরোধ করা দেখুন।

পরবর্তী পদক্ষেপ এবং সম্পদ

Chrome কে ডিফল্টরূপে অরিজিন-কিড এজেন্ট ক্লাস্টারের সাথে কাজ করার জন্য, আমরা document.domain কে শুধুমাত্র রিড করব। ক্রোম টিম 2022 সালের মধ্যে কোনো এক সময় এই পরিবর্তনটি অবতরণ করার লক্ষ্য রাখছে।

আনস্প্ল্যাশে মার্কাস উইঙ্কলারের ছবি