এক্সটেনশন সার্ভিস কর্মীরা স্ট্যান্ডার্ড সার্ভিস ওয়ার্কার ইভেন্ট এবং এক্সটেনশন নেমস্পেসের ইভেন্ট উভয়ের প্রতিই সাড়া দেয়। এগুলি একসাথে উপস্থাপন করা হয় কারণ প্রায়শই একটি এক্সটেনশন ব্যবহারের সময় এক ধরণের অন্য ধরণের অনুসরণ করা হয়।
স্থাপন
ব্যবহারকারী যখন Chrome ওয়েব স্টোর থেকে কোনও পরিষেবা কর্মী ইনস্টল বা আপডেট করেন অথবা যখন তারা chrome://extensions পৃষ্ঠা ব্যবহার করে একটি আনপ্যাকড এক্সটেনশন লোড বা আপডেট করেন তখন ইনস্টলেশন ঘটে। এই ক্রমে তিনটি ঘটনা ঘটে:
-
install(পরিষেবা কর্মী ইভেন্ট) -
chrome.runtime.onInstalledইনস্টল করা হয়েছে (এক্সটেনশন ইভেন্ট) -
activate(পরিষেবা কর্মী ইভেন্ট)
সার্ভিসওয়ার্কাররেজিস্ট্রেশন.ইনস্টল
ইনস্টলেশনের সময় প্রথম যে ইভেন্টটি শুরু হয় তা হল একটি ওয়েব পরিষেবা কর্মীর ইনস্টল ইভেন্ট।
chrome.runtime.on ইনস্টল করা হয়েছে
এরপরে এক্সটেনশনের onInstalled ইভেন্টটি আসে, যা এক্সটেনশনটি (পরিষেবা কর্মী নয়) প্রথম ইনস্টল করার সময়, এক্সটেনশনটি একটি নতুন সংস্করণে আপডেট করা হলে এবং যখন Chrome একটি নতুন সংস্করণে আপডেট করা হয় তখন কার্যকর হয়। একটি অবস্থা সেট করতে বা এককালীন প্রাথমিককরণের জন্য, যেমন একটি প্রসঙ্গ মেনু , এই ইভেন্টটি ব্যবহার করুন।
chrome.runtime.onInstalled.addListener((details) => {
if(details.reason !== "install" && details.reason !== "update") return;
chrome.contextMenus.create({
"id": "sampleContextMenu",
"title": "Sample Context Menu",
"contexts": ["selection"]
});
});
সার্ভিস ওয়ার্কার রেজিস্ট্রেশন.অ্যাক্টিভ
অবশেষে, সার্ভিস ওয়ার্কারের অ্যাক্টিভেট ইভেন্টটি বন্ধ হয়ে যায়। মনে রাখবেন যে ওয়েব সার্ভিস ওয়ার্কারের বিপরীতে, এই ইভেন্টটি একটি এক্সটেনশন ইনস্টল করার সাথে সাথেই বন্ধ হয়ে যায় কারণ একটি এক্সটেনশনে পৃষ্ঠা পুনরায় লোডের সাথে তুলনীয় কিছুই নেই।
এক্সটেনশন স্টার্টআপ
যখন কোনও ব্যবহারকারীর প্রোফাইল শুরু হয়, তখন chrome.runtime.onStartup ইভেন্টটি চালু হয় কিন্তু কোনও পরিষেবা কর্মী ইভেন্ট চালু হয় না।
নিষ্ক্রিয় এবং বন্ধ
সাধারণত, নিম্নলিখিত শর্তগুলির মধ্যে একটি পূরণ হলে Chrome একজন পরিষেবা কর্মীকে বরখাস্ত করে:
- ৩০ সেকেন্ড নিষ্ক্রিয় থাকার পর। কোনও ইভেন্ট গ্রহণ করলে বা কোনও এক্সটেনশন API কল করলে এই টাইমারটি রিসেট হয়ে যায়।
- যখন কোনও একক অনুরোধ, যেমন কোনও ইভেন্ট বা API কল, প্রক্রিয়া করতে ৫ মিনিটের বেশি সময় নেয়।
- যখন একটি
fetch()প্রতিক্রিয়া আসতে 30 সেকেন্ডের বেশি সময় নেয়।
ইভেন্ট এবং এক্সটেনশন API-তে কলগুলি এই টাইমারগুলিকে রিসেট করে, এবং যদি পরিষেবা কর্মী নিষ্ক্রিয় হয়ে যায়, তাহলে একটি আগত ইভেন্ট তাদের পুনরুজ্জীবিত করবে। তবুও, আপনার পরিষেবা কর্মীকে অপ্রত্যাশিত সমাপ্তির বিরুদ্ধে স্থিতিস্থাপক হওয়ার জন্য ডিজাইন করা উচিত।
আপনার এক্সটেনশনের রিসোর্স খরচ অপ্টিমাইজ করার জন্য, সম্ভব হলে আপনার পরিষেবা কর্মীকে অনির্দিষ্টকালের জন্য জীবিত রাখা এড়িয়ে চলুন। আপনি অনিচ্ছাকৃতভাবে এটি করছেন না তা নিশ্চিত করার জন্য আপনার এক্সটেনশনগুলি পরীক্ষা করুন।
গ্লোবাল ভেরিয়েবল ব্যবহার না করে ডেটা ধরে রাখুন
সার্ভিস ওয়ার্কার বন্ধ হয়ে গেলে আপনার সেট করা যেকোনো গ্লোবাল ভেরিয়েবল হারিয়ে যাবে। গ্লোবাল ভেরিয়েবল ব্যবহার না করে, মানগুলি স্টোরেজে সংরক্ষণ করুন। আপনার বিকল্পগুলি তালিকাভুক্ত করা হয়েছে।
- chrome.storage API
- একটি এক্সটেনশন API যা একাধিক ধরণের স্টোরেজ অফার করে; স্থানীয়, সেশন, পরিচালিত (ডোমেন) এবং সিঙ্ক। এই API ডেভেলপার-সংজ্ঞায়িত কী ব্যবহার করে চিহ্নিত এবং পুনরুদ্ধার করা JSON অবজেক্ট সংরক্ষণ করে। ব্যবহারকারী যখন ওয়েব ক্যাশে সাফ করেন তখন এই ধরণের স্টোরেজ সরানো হয় না।
- ইনডেক্সডডিবি এপিআই
- ফাইল এবং ব্লব সহ স্ট্রাকচার্ড ডেটার ক্লায়েন্ট-সাইড স্টোরেজের জন্য একটি নিম্ন-স্তরের API। এই API লেনদেনের ডেটা স্টোরেজ তৈরি এবং পুনরুদ্ধারের জন্য আদিম উপাদান সরবরাহ করে। যদিও এই API প্রায়শই কিছু ব্যবহারের ক্ষেত্রে খুব জটিল, তবুও এর উপরে বেশ কয়েকটি তৃতীয়-পক্ষের স্টোরেজ সমাধান তৈরি করা হয়েছে।
- ক্যাশস্টোরেজ এপিআই
- রিকোয়েস্ট এবং রেসপন্স অবজেক্ট পেয়ারের জন্য একটি স্থায়ী স্টোরেজ মেকানিজম। এই APIটি বিশেষভাবে ওয়েব সার্ভিস কর্মীদের জন্য ডিজাইন করা হয়েছে এবং এটি একটি এন্ডপয়েন্ট থেকে ডেটা পুনরুদ্ধার করতে ব্যবহৃত হয়। ব্যবহারকারীরা আপ-টু-ডেট ডেটা দেখতে পাচ্ছে কিনা এবং কতটা গুরুত্বপূর্ণ তার উপর নির্ভর করে এই API ব্যবহারের বিভিন্ন উপায় রয়েছে। আরও তথ্যের জন্য, The Offline Cookbook দেখুন। যদি না আপনি বিশেষভাবে ফেচ হ্যান্ডলার ব্যবহার করে নেটওয়ার্ক অনুরোধগুলি প্রক্সি করছেন, তাহলে আপনার
chrome.storageব্যবহার করা উচিত।
ন্যূনতম Chrome সংস্করণটি বেছে নিন
ম্যানিফেস্ট V3 প্রকাশের পর থেকে, আমরা পরিষেবা কর্মীদের জীবনকালগুলিতে বেশ কিছু উন্নতি করেছি। এর অর্থ হল যদি আপনার ম্যানিফেস্ট V3 এক্সটেনশনটি Chrome এর পূর্ববর্তী সংস্করণগুলিকে সমর্থন করে, তবে কিছু শর্ত রয়েছে যা সম্পর্কে আপনার সচেতন থাকা প্রয়োজন। যদি এই শর্তগুলি আপনার এক্সটেনশনকে প্রভাবিত না করে, তাহলে আপনি এই বিভাগ থেকে এগিয়ে যেতে পারেন। যদি সেগুলি করে, তাহলে আপনার ম্যানিফেস্টে একটি ন্যূনতম Chrome সংস্করণ নির্দিষ্ট করার কথা বিবেচনা করুন।
ক্রোম ১২০
পরিষেবা কর্মীর জীবনচক্রের সাথে মেলে অ্যালার্মগুলি এখন সর্বনিম্ন 30 সেকেন্ডের মধ্যে সেট করা যেতে পারে। আরও বিস্তারিত জানার জন্য chrome.alarms দেখুন।
ক্রোম ১১৮
chrome.debugger API ব্যবহার করে তৈরি করা সক্রিয় ডিবাগার সেশনগুলি এখন পরিষেবা কর্মীকে জীবিত রাখে। এটি পরিষেবা কর্মীদের এই API-এর জন্য কলের সময় সময় শেষ হতে বাধা দেয়।
ক্রোম ১১৬
Chrome 116 নিম্নলিখিত পরিষেবা কর্মীদের জীবনকাল উন্নতিগুলি প্রবর্তন করেছে:
সক্রিয়
WebSocketসংযোগগুলি এখন এক্সটেনশন পরিষেবা কর্মীর জীবনকাল বাড়িয়ে দেয়। একটি এক্সটেনশন পরিষেবা কর্মীরWebSocketজুড়ে বার্তা পাঠানো বা গ্রহণ করা পরিষেবা কর্মীর নিষ্ক্রিয় টাইমার রিসেট করে।এক্সটেনশন পরিষেবা কর্মীদের জন্য অতিরিক্ত এক্সটেনশন API গুলিকে পাঁচ মিনিটের টাইমআউট পিরিয়ড অতিক্রম করার অনুমতি দেওয়া হয়। এই API গুলি একটি ব্যবহারকারী প্রম্পট প্রদর্শন করে এবং তাই সমাধান করতে যুক্তিসঙ্গতভাবে পাঁচ মিনিটের বেশি সময় লাগতে পারে। এর মধ্যে রয়েছে
desktopCapture.chooseDesktopMedia(),identity.launchWebAuthFlow(),management.uninstall(), এবংpermissions.request()।
ক্রোম ১১৪
দীর্ঘস্থায়ী বার্তা সহ একটি বার্তা পাঠানো পরিষেবা কর্মীকে জীবিত রাখে। একটি পোর্ট খোলার ফলে আর টাইমার রিসেট হয় না।
ক্রোম ১১০
এক্সটেনশন API কলগুলি টাইমারগুলিকে রিসেট করে। এর আগে, শুধুমাত্র ইভেন্ট হ্যান্ডলার চালানো একজন পরিষেবা কর্মীকে জীবিত রাখত। যে কোনও ইভেন্ট যা সারিবদ্ধ ছিল, কিন্তু যার জন্য কোনও হ্যান্ডলার কল করা হয়নি, তা রিসেট করার কারণ হত না।
ক্রোম ১০৯
অফস্ক্রিন ডকুমেন্ট থেকে পাঠানো বার্তাগুলি টাইমারগুলি রিসেট করে।
ক্রোম ১০৫
chrome.runtime.connectNative() ব্যবহার করে একটি নেটিভ মেসেজিং হোস্টের সাথে সংযোগ স্থাপন করলে একজন পরিষেবা কর্মী জীবিত থাকবে। যদি হোস্ট প্রক্রিয়াটি ক্র্যাশ হয় বা বন্ধ হয়ে যায়, তাহলে পোর্টটি বন্ধ হয়ে যাবে এবং টাইমারগুলি সম্পূর্ণ হওয়ার পরে পরিষেবা কর্মীটি বন্ধ হয়ে যাবে। পোর্টের onDisconnect ইভেন্ট হ্যান্ডলারে chrome.runtime.connectNative() কল করে এর বিরুদ্ধে সুরক্ষার জন্য।