এক্সটেনশন সার্ভিস ওয়ার্কার লাইফসাইকেল, এক্সটেনশন সার্ভিস ওয়ার্কার লাইফ সাইকেল

এক্সটেনশন সার্ভিস ওয়ার্কাররা সাধারণ সার্ভিস ওয়ার্কার ইভেন্ট এবং এক্সটেনশন নেমস্পেসের ইভেন্ট উভয়টিতেই সাড়া দেয়। এগুলোকে একসাথে উপস্থাপন করা হয়েছে, কারণ একটি এক্সটেনশন ব্যবহারের সময় প্রায়শই এক ধরনের ইভেন্টের পর আরেকটি আসে।

ইনস্টলেশন

যখন ব্যবহারকারী ক্রোম ওয়েব স্টোর থেকে কোনো সার্ভিস ওয়ার্কার ইনস্টল বা আপডেট করেন, অথবা chrome://extensions পৃষ্ঠা ব্যবহার করে কোনো আনপ্যাক করা এক্সটেনশন লোড বা আপডেট করেন, তখন ইনস্টলেশন সম্পন্ন হয়। তিনটি ঘটনা এই ক্রমে ঘটে:

  1. install (সার্ভিস ওয়ার্কার ইভেন্ট)
  2. chrome.runtime.onInstalled (এক্সটেনশন ইভেন্ট)
  3. activate (পরিষেবা কর্মী ইভেন্ট)

ServiceWorkerRegistration.install

ইনস্টলেশনের সময় প্রথম যে ইভেন্টটি ফায়ার হয়, সেটি হলো একটি ওয়েব সার্ভিস ওয়ার্কারের ইনস্টল ইভেন্ট।

chrome.runtime.onInstalled

এরপরে রয়েছে এক্সটেনশনটির onInstalled ইভেন্ট, যা এক্সটেনশনটি (সার্ভিস ওয়ার্কার নয়) প্রথমবার ইনস্টল হলে, এক্সটেনশনটি নতুন সংস্করণে আপডেট হলে এবং ক্রোম নতুন সংস্করণে আপডেট হলে ফায়ার হয়। কোনো স্টেট সেট করতে বা এককালীন ইনিশিয়ালাইজেশনের জন্য, যেমন একটি কনটেক্সট মেনু , এই ইভেন্টটি ব্যবহার করুন।

chrome.runtime.onInstalled.addListener((details) => {
  if(details.reason !== "install" && details.reason !== "update") return;
  chrome.contextMenus.create({
    "id": "sampleContextMenu",
    "title": "Sample Context Menu",
    "contexts": ["selection"]
  });
});

ServiceWorkerRegistration.active

অবশেষে, সার্ভিস ওয়ার্কারের অ্যাক্টিভেট ইভেন্টটি ফায়ার হয়। উল্লেখ্য যে, ওয়েব সার্ভিস ওয়ার্কারের মতো নয়, এই ইভেন্টটি কোনো এক্সটেনশন ইনস্টল করার ঠিক পরেই ফায়ার হয়, কারণ একটি এক্সটেনশনের মধ্যে পেজ রিলোডের মতো তুলনীয় কিছু থাকে না।

এক্সটেনশন স্টার্টআপ

যখন কোনো ব্যবহারকারীর প্রোফাইল চালু হয়, তখন chrome.runtime.onStartup ইভেন্টটি ফায়ার হয় কিন্তু কোনো সার্ভিস ওয়ার্কার ইভেন্ট কল করা হয় না।

নিষ্ক্রিয় এবং বন্ধ

সাধারণত, নিম্নলিখিত শর্তগুলির মধ্যে যেকোনো একটি পূরণ হলে Chrome একটি সার্ভিস ওয়ার্কার বন্ধ করে দেয়:

  • ৩০ সেকেন্ড নিষ্ক্রিয় থাকার পর। কোনো ইভেন্ট পেলে বা এক্সটেনশন এপিআই কল করলে এই টাইমারটি রিসেট হয়ে যায়।
  • যখন কোনো একটি অনুরোধ, যেমন কোনো ইভেন্ট বা এপিআই কল, প্রক্রিয়া করতে ৫ মিনিটের বেশি সময় লাগে।
  • যখন একটি fetch() রেসপন্স আসতে ৩০ সেকেন্ডের বেশি সময় লাগে।

ইভেন্ট এবং এক্সটেনশন এপিআই-তে কল এই টাইমারগুলিকে রিসেট করে, এবং যদি সার্ভিস ওয়ার্কারটি নিষ্ক্রিয় হয়ে যায়, তবে একটি আগত ইভেন্ট সেগুলিকে পুনরায় সক্রিয় করবে। তা সত্ত্বেও, আপনার সার্ভিস ওয়ার্কারকে অপ্রত্যাশিত সমাপ্তির বিরুদ্ধে স্থিতিস্থাপক করে ডিজাইন করা উচিত।

আপনার এক্সটেনশনের রিসোর্স ব্যবহার অপ্টিমাইজ করতে, সম্ভব হলে আপনার সার্ভিস ওয়ার্কারকে অনির্দিষ্টকালের জন্য চালু রাখা এড়িয়ে চলুন। আপনার এক্সটেনশনগুলো পরীক্ষা করে নিশ্চিত করুন যে আপনি অনিচ্ছাকৃতভাবে এমনটি করছেন না।

গ্লোবাল ভেরিয়েবল ব্যবহার না করে ডেটা সংরক্ষণ করুন।

সার্ভিস ওয়ার্কার বন্ধ হয়ে গেলে আপনার সেট করা যেকোনো গ্লোবাল ভেরিয়েবল হারিয়ে যাবে। গ্লোবাল ভেরিয়েবল ব্যবহার না করে, মানগুলো স্টোরেজে সংরক্ষণ করুন। আপনার বিকল্পগুলো তালিকাভুক্ত করা আছে।

chrome.storage API
একটি এক্সটেনশন এপিআই যা একাধিক ধরণের স্টোরেজ প্রদান করে; লোকাল, সেশন, ম্যানেজড (ডোমেইন), এবং সিঙ্ক। এই এপিআই ডেভেলপার-নির্ধারিত কী ব্যবহার করে শনাক্ত ও পুনরুদ্ধার করা JSON অবজেক্ট সংরক্ষণ করে। ব্যবহারকারী ওয়েব ক্যাশ পরিষ্কার করলেও এই ধরণের স্টোরেজ মুছে যায় না।
ইনডেক্সডডিবি এপিআই
ফাইল এবং ব্লব সহ স্ট্রাকচার্ড ডেটা ক্লায়েন্ট-সাইডে সংরক্ষণের জন্য একটি লো-লেভেল এপিআই। এই এপিআইটি ট্রানজ্যাকশনাল ডেটা স্টোরেজ এবং পুনরুদ্ধারের জন্য প্রিমিটিভ সরবরাহ করে। যদিও এই এপিআইটি কিছু ব্যবহারের ক্ষেত্রে প্রায়শই খুব জটিল, বেশ কিছু থার্ড-পার্টি স্টোরেজ সলিউশন এর উপর ভিত্তি করে তৈরি করা হয়েছে।
ক্যাশস্টোরেজ এপিআই
Request এবং Response অবজেক্ট জোড়া সংরক্ষণের জন্য একটি স্থায়ী ব্যবস্থা। এই API-টি বিশেষভাবে ওয়েব সার্ভিস ওয়ার্কারদের জন্য ডিজাইন করা হয়েছে এবং এটি একটি এন্ডপয়েন্ট থেকে ডেটা পুনরুদ্ধার করতে ব্যবহৃত হয়। ব্যবহারকারীদের জন্য হালনাগাদ ডেটা দেখা কতটা জরুরি এবং আদৌ জরুরি কিনা, তার উপর নির্ভর করে এই API-টি ব্যবহারের বিভিন্ন উপায় রয়েছে। আরও তথ্যের জন্য, The Offline Cookbook দেখুন। যদি না আপনি বিশেষভাবে fetch handler ব্যবহার করে নেটওয়ার্ক রিকোয়েস্ট প্রক্সি করেন, তবে আপনার chrome.storage ব্যবহার করা উচিত।

ক্রোমের সর্বনিম্ন সংস্করণ বেছে নিন

Manifest V3 প্রকাশের পর থেকে, আমরা সার্ভিস ওয়ার্কারের লাইফটাইমে বেশ কিছু উন্নতি করেছি। এর মানে হলো, যদি আপনার Manifest V3 এক্সটেনশনটি Chrome-এর আগের সংস্করণগুলো সাপোর্ট করে, তবে কিছু শর্ত রয়েছে যা সম্পর্কে আপনাকে সচেতন থাকতে হবে। যদি এই শর্তগুলো আপনার এক্সটেনশনকে প্রভাবিত না করে, তবে আপনি এই অংশটি এড়িয়ে যেতে পারেন। আর যদি করে, তবে আপনার ম্যানিফেস্টে একটি ন্যূনতম Chrome সংস্করণ উল্লেখ করার কথা বিবেচনা করতে পারেন।

ক্রোম ১২০

সার্ভিস ওয়ার্কার লাইফসাইকেলের সাথে সামঞ্জস্য রেখে এখন অ্যালার্মের সর্বনিম্ন সময়কাল ৩০ সেকেন্ড নির্ধারণ করা যাবে। আরও বিস্তারিত জানতে chrome.alarms দেখুন।

ক্রোম ১১৮

chrome.debugger API ব্যবহার করে তৈরি করা সক্রিয় ডিবাগার সেশনগুলো এখন সার্ভিস ওয়ার্কারকে সচল রাখে। এর ফলে এই API-কে কল করার সময় সার্ভিস ওয়ার্কারগুলো টাইম আউট হয়ে যায় না।

ক্রোম ১১৬

ক্রোম ১১৬-এ সার্ভিস ওয়ার্কারের জীবনকাল সংক্রান্ত নিম্নলিখিত উন্নতিগুলো আনা হয়েছে:

  • সক্রিয় WebSocket সংযোগগুলো এখন এক্সটেনশন সার্ভিস ওয়ার্কারের জীবনকাল বাড়িয়ে দেয়। একটি এক্সটেনশন সার্ভিস ওয়ার্কারের মধ্যে WebSocket মাধ্যমে বার্তা পাঠানো বা গ্রহণ করা হলে সার্ভিস ওয়ার্কারটির নিষ্ক্রিয় টাইমার রিসেট হয়ে যায়।

  • এক্সটেনশন সার্ভিস ওয়ার্কারদের জন্য নির্ধারিত পাঁচ মিনিটের টাইমআউট সময়সীমা অতিক্রম করার অনুমতি অতিরিক্ত এক্সটেনশন এপিআইগুলোকে দেওয়া হয়। এই এপিআইগুলো ব্যবহারকারীকে একটি প্রম্পট দেখায় এবং তাই এগুলোর সমাধান হতে স্বাভাবিকভাবেই পাঁচ মিনিটের বেশি সময় লাগতে পারে। এগুলোর মধ্যে রয়েছে desktopCapture.chooseDesktopMedia() , identity.launchWebAuthFlow() , management.uninstall() , এবং permissions.request()

ক্রোম ১১৪

দীর্ঘস্থায়ী মেসেজিং ব্যবহার করে বার্তা পাঠালে সার্ভিস ওয়ার্কারটি সচল থাকে। পোর্ট খুললে এখন আর টাইমারগুলো রিসেট হয় না।

ক্রোম ১১০

এক্সটেনশন এপিআই কল টাইমারগুলো রিসেট করে। এর আগে, শুধুমাত্র চলমান ইভেন্ট হ্যান্ডলারগুলোই একটি সার্ভিস ওয়ার্কারকে সচল রাখত। কিউতে থাকা কোনো ইভেন্ট, যার জন্য হ্যান্ডলার কল করা হয়নি, তা রিসেটের কারণ হতো না।

ক্রোম ১০৯

অফস্ক্রিন ডকুমেন্ট থেকে পাঠানো বার্তা টাইমারগুলো রিসেট করে দেয়।

ক্রোম ১০৫

chrome.runtime.connectNative() ব্যবহার করে কোনো নেটিভ মেসেজিং হোস্টে সংযোগ স্থাপন করলে একটি সার্ভিস ওয়ার্কার সচল থাকে। যদি হোস্ট প্রসেসটি ক্র্যাশ করে বা বন্ধ হয়ে যায়, তাহলে পোর্টটি বন্ধ হয়ে যায় এবং টাইমার শেষ হওয়ার পর সার্ভিস ওয়ার্কারটি টার্মিনেট হয়ে যায়। এর থেকে সুরক্ষার জন্য পোর্টের onDisconnect ইভেন্ট হ্যান্ডলারে chrome.runtime.connectNative() কল করুন।