বর্ধিত আজীবন শেয়ার্ড ওয়ার্কার্স অরিজিন ট্রায়াল

প্রকাশিত: ৩১ জুলাই, ২০২৫

ক্রোম ১৩৯ থেকে বর্ধিত জীবনকাল ভাগ করা কর্মীদের জন্য একটি নতুন অরিজিন ট্রায়ালে অংশগ্রহণ করুন। ট্রায়ালটি একটি নতুন extendedLifetime: true বিকল্প।

বর্ধিত জীবনকাল বৈশিষ্ট্যের ব্যবহারের ধরণ

ব্যবহারকারী যখন পৃষ্ঠা থেকে দূরে সরে যান, তখন অনেক সাইট কিছু কাজ করতে চায়। উদাহরণস্বরূপ, স্টোরেজে লেখা, অথবা সার্ভারে ডেটা ফেরত পাঠানো, অবস্থা সংরক্ষণ বা বিশ্লেষণ রেকর্ড করার জন্য।

ওয়েব প্ল্যাটফর্মটি কিছু সহজ ব্যবহারের ক্ষেত্রে মোকাবেলা করার জন্য কয়েকটি API প্রদান করে, তবে প্রতিটিরই সীমাবদ্ধতা রয়েছে:

  • localStorage রাইটসের মতো সিঙ্ক্রোনাস জাভাস্ক্রিপ্ট এপিআইগুলি বর্তমান পৃষ্ঠাটি আনলোড করার আগে সম্পূর্ণরূপে চালানো হয়।
  • fetch API keepalive এবং সম্প্রতি fetchLater মতো বেশ কিছু বিকল্প রয়েছে, যা অল্প সময়ের জন্য ডকুমেন্ট আনলোডের পরেও অনুরোধ পাঠাতে দেয়।

তবে, এগুলি শুধুমাত্র চূড়ান্ত fetch অনুরোধ ব্যতীত সিঙ্ক্রোনাস কাজকে কভার করে। এগুলি হ্যাশ বা এনক্রিপ্ট করার জন্য IndexedDB , Compression Streams , অথবা Web Crypto এর মতো অ্যাসিঙ্ক্রোনাস API ব্যবহারের অনুমতি দেয় না। অনেক API, বিশেষ করে নতুন API, মূল থ্রেড ব্লক করা এড়াতে অ্যাসিঙ্ক্রোনাস হয় তাই আনলোডের সময় এই API গুলি ব্যবহার করতে না পারা সীমাবদ্ধ।

বিকল্প হল পরিষেবা কর্মীদের ব্যবহার করা, যা পৃথক পৃষ্ঠার জীবনচক্রের বাইরে থাকে। তবে, এটি একটি বরং ভারী সমাধান, ডেভেলপারদের জন্য আরও জটিল জীবনচক্র এবং পরিচালনার প্রয়োজনীয়তা রয়েছে, ব্যবহারকারীদের জন্য অতিরিক্ত প্রক্রিয়া এবং মেমরির প্রয়োজনীয়তার কথা উল্লেখ না করে। এটি পরিষেবা কর্মীদের প্রধান ব্যবহারের ক্ষেত্রেও মেলে না (নেটওয়ার্ক অনুরোধের জন্য প্রক্সি হিসাবে কাজ করার জন্য)। পৃষ্ঠা আনলোডের কিছু কাজ সম্পন্ন করার ক্ষেত্রে কেবল সম্পূর্ণ পরিষেবা কর্মীদের ব্যবহার করা অতিরিক্ত বলে মনে হয়।

প্রস্তাবিত সমাধান

SharedWorker API হল একটি হালকা API যা মূল থ্রেড থেকে কাজ অফলোড করার জন্য ব্যবহৃত হয়। তবে, বর্তমানে এগুলি অরিজিনের লাইফটাইমের (যখন সেই অরিজিনের শেষ পৃষ্ঠাটি আনলোড করা হয়) বেশি সময় ধরে চলে না। Chrome SharedWorker API-তে একটি নতুন বিকল্প যুক্ত করার প্রস্তাব করছে যাতে শেয়ার্ড কর্মীরা অল্প সময়ের জন্য ডকুমেন্ট ধ্বংসের বাইরে থাকতে পারেন।

HTML স্ট্যান্ডার্ড ইতিমধ্যেই ডকুমেন্ট আনলোড করার পরে শেয়ার্ড ওয়ার্কারদের অল্প সময়ের জন্য জীবিত রাখার জন্য বাস্তবায়নগুলিকে উৎসাহিত করে, যাতে একই-অরিজিন পৃষ্ঠাগুলির মধ্যে নেভিগেট করার সময় ছিঁড়ে না যায় এবং তারপরে শেয়ার্ড ওয়ার্কারটি পুনরায় তৈরি না হয়। বর্ধিত জীবনকাল প্রস্তাবটি কেবল এটিকে প্রসারিত করে এই পরামর্শ দিয়ে যে, ব্যবহারকারী যদি একই-অরিজিন গন্তব্যে নেভিগেট নাও করে, তবুও ব্যবহারকারী এজেন্টের উচিত শেয়ার্ড ওয়ার্কারকে কিছু সময়ের জন্য জীবিত রাখা, যাতে অ্যাসিঙ্ক কাজ শেষ করা যায়।

প্রস্তাবটি হল, শেষ ডকুমেন্ট আনলোডের পরেও শেয়ার্ড কর্মীদের একই সময় ধরে কাজ চালিয়ে যাওয়ার অনুমতি দেওয়া, যেমন সার্ভার কর্মীদের নিষ্ক্রিয় থাকার অনুমতি দেওয়া হয়—যা Chrome-এর জন্য ৩০ সেকেন্ড। মনে রাখবেন যে শেয়ার্ড কর্মীদের জন্য এটি আনলোডের পরে সর্বোচ্চ জীবনকাল, একটি নিষ্ক্রিয় সময় নয়। অর্থাৎ, ৩০ সেকেন্ডের সীমা আনলোড থেকে শুরু হয়, নিষ্ক্রিয় সময়ের চেয়ে। যে কাজ শুরু হয়েছে এবং সেই সময়ের মধ্যে এখনও সম্পন্ন হয়নি তা বাতিল করা হবে।

বর্ধিত জীবনকাল সক্ষম করুন

ব্যবহারকারীদের জন্য সাইটগুলিতে বৈশিষ্ট্যটি সক্রিয় করা যেতে পারে বর্ধিত জীবনকাল ভাগ করা কর্মীদের জন্য একটি অরিজিন ট্রায়ালের জন্য নিবন্ধন করে। বিকল্পভাবে, ডেভেলপাররা chrome://flags/#enable-experimental-web-platform-features পতাকা ব্যবহার করে তাদের নিজস্ব ব্রাউজারের জন্য সক্ষম করতে পারেন।

উদাহরণ কোড

ট্রায়াল বা ফিচার ফ্ল্যাগে অংশগ্রহণ করার পর, নিম্নরূপ বর্ধিত জীবনকাল সক্ষম করুন:

const myWorker = new SharedWorker("worker.js", { extendedLifetime: true });

যেহেতু শেয়ার্ড ওয়ার্কাররাও ব্লব সমর্থন করে, তাই এটি আলাদা স্ক্রিপ্ট ছাড়াই সক্রিয় করা যেতে পারে। উদাহরণস্বরূপ, একটি IndexedDb-তে ডেটা লেখার জন্য:

const sharedWorkerScript = `
  const transaction = db.transaction("analytics", "readwrite");
  const store = transaction.objectStore("analytics");
  const request = store.get("visitCount");
  request.onsuccess = (event) => {
    const newCount = (event.target.result || 0) + 1;
    store.put(newCount, "visitCount");
  };
`;

document.addEventListener("pagehide", () => {
  const blob = new Blob([sharedWorkerScript], { type: "text/javascript" });
  const blobURL = URL.createObjectURL(blob);
  new SharedWorker(blobURL, { extendedLifetime: true });
});

আমাদের এখানে একটি উদাহরণ অ্যাপ্লিকেশনও আছে: https://sharedworker-extendedlifetime.netlify.app/ । যখন পৃষ্ঠাটি পুনরায় লোড করা হয় (অথবা 30 সেকেন্ডের মধ্যে বন্ধ করে পুনরায় খোলা হয়), তখনও পূর্ববর্তী গণনাটি উপলব্ধ থাকে।

শেয়ার্ড ওয়ার্কাররা chrome://inspect/#workers সাইটে দেখা যাবে এবং এটি শীঘ্রই উন্নত করা হবে যাতে দেখা যায় যে extendedLifetime বিকল্পটি ব্যবহার করা হয়েছে কিনা। পৃষ্ঠা আনলোডের পরেও 30 সেকেন্ডের জন্য এক্সটেন্ডেড লাইফটাইম শেয়ার্ড ওয়ার্কাররা এই পৃষ্ঠায় দেখাতে থাকবে।

আপনার মতামত শেয়ার করুন

বর্ধিত জীবনকাল ভাগ করা কর্মীর উৎপত্তি ট্রায়াল সম্পর্কে আপনার প্রতিক্রিয়া শোনার জন্য আমরা অধীর আগ্রহে অপেক্ষা করছি।

API আকৃতিটি GitHub-এ আলোচনা করা হচ্ছে এবং আমাদের কাছে আরও বিস্তারিত প্রযুক্তিগত ব্যাখ্যা রয়েছে।

Chrome এর বাস্তবায়ন সম্পর্কে প্রতিক্রিয়ার জন্য, একটি Chromium বাগ ফাইল করুন।