এক্সটেনশন সার্ভিস কর্মীরা স্ট্যান্ডার্ড সার্ভিস ওয়ার্কার ইভেন্ট এবং এক্সটেনশন নেমস্পেসের ইভেন্ট উভয়েই সাড়া দেয়। এগুলি একসাথে উপস্থাপন করা হয় কারণ প্রায়শই একটি এক্সটেনশন ব্যবহারের সময় এক প্রকার অন্যটিকে অনুসরণ করে।
ইনস্টলেশন
ইনস্টলেশন ঘটে যখন ব্যবহারকারী Chrome ওয়েব স্টোর থেকে কোনও পরিষেবা কর্মীকে ইনস্টল বা আপডেট করে বা যখন তারা chrome://extensions
পৃষ্ঠা ব্যবহার করে একটি আনপ্যাক করা এক্সটেনশন লোড বা আপডেট করে । তিনটি ঘটনা নিচের ক্রমানুসারে ঘটে।
ServiceWorkerRegistration.install
ইন্সটলেশনের সময় প্রথম যে ইভেন্টটি চালানো হয় সেটি হল একজন ওয়েব সার্ভিস ওয়ার্কার এর ইন্সটল ইভেন্ট।
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"]
});
});
ServiceWorkerRegistration.active
অবশেষে, পরিষেবা কর্মীর সক্রিয় ইভেন্ট বহিস্কার করা হয়. নোট করুন যে ওয়েব পরিষেবা কর্মীদের বিপরীতে, এই ইভেন্টটি একটি এক্সটেনশন ইনস্টল করার সাথে সাথেই বরখাস্ত করা হয় কারণ একটি এক্সটেনশনে একটি পৃষ্ঠা পুনরায় লোড করার সাথে তুলনাযোগ্য কিছুই নেই৷
এক্সটেনশন স্টার্টআপ
যখন একটি ব্যবহারকারীর প্রোফাইল শুরু হয়, তখন chrome.runtime.onStartup
ইভেন্টটি ফায়ার হয় কিন্তু কোনো পরিষেবা কর্মী ইভেন্ট আহ্বান করা হয় না৷
নিষ্ক্রিয় এবং শাটডাউন
সাধারণত, নিম্নলিখিত শর্তগুলির মধ্যে একটি পূরণ হলে Chrome একজন পরিষেবা কর্মীকে বরখাস্ত করে:
- 30 সেকেন্ডের নিষ্ক্রিয়তার পর। একটি ইভেন্ট গ্রহণ করা বা একটি এক্সটেনশন API কল করা এই টাইমার রিসেট করে৷
- যখন একটি একক অনুরোধ, যেমন একটি ইভেন্ট বা API কল, প্রক্রিয়া হতে 5 মিনিটের বেশি সময় নেয়।
- যখন একটি
fetch()
প্রতিক্রিয়া আসতে 30 সেকেন্ডের বেশি সময় নেয়।
ইভেন্ট এবং এক্সটেনশন API-এ কল এই টাইমারগুলিকে রিসেট করে, এবং যদি পরিষেবা কর্মী নিষ্ক্রিয় হয়ে থাকে, একটি ইনকামিং ইভেন্ট তাদের পুনরুজ্জীবিত করবে। তবুও, আপনার পরিষেবা কর্মীকে অপ্রত্যাশিত সমাপ্তির বিরুদ্ধে স্থিতিস্থাপক হওয়ার জন্য ডিজাইন করা উচিত।
আপনার এক্সটেনশনের সম্পদ খরচ অপ্টিমাইজ করতে, সম্ভব হলে আপনার পরিষেবা কর্মীকে অনির্দিষ্টকালের জন্য জীবিত রাখা এড়িয়ে চলুন। আপনি অনিচ্ছাকৃতভাবে এটি করছেন না তা নিশ্চিত করতে আপনার এক্সটেনশন পরীক্ষা করুন।
গ্লোবাল ভেরিয়েবল ব্যবহার না করে ডেটা বজায় রাখুন
পরিষেবা কর্মী বন্ধ হয়ে গেলে আপনার সেট করা যেকোন গ্লোবাল ভেরিয়েবল হারিয়ে যাবে। গ্লোবাল ভেরিয়েবল ব্যবহার করার পরিবর্তে, স্টোরেজে মান সংরক্ষণ করুন। আপনার বিকল্প নীচে তালিকাভুক্ত করা হয়. নোট করুন যে ওয়েব স্টোরেজ API এক্সটেনশন পরিষেবা কর্মীদের জন্য উপলব্ধ নয়৷
- chrome.storage API
- একটি এক্সটেনশন API যা একাধিক ধরনের স্টোরেজ অফার করে; স্থানীয়, সেশন, পরিচালিত (ডোমেন), এবং সিঙ্ক। এই API ডেভেলপার-সংজ্ঞায়িত কীগুলির সাহায্যে চিহ্নিত এবং পুনরুদ্ধার করা JSON অবজেক্টগুলি সঞ্চয় করে। কোনো ব্যবহারকারী ওয়েব ক্যাশে সাফ করলে এই ধরনের স্টোরেজ সরানো হবে না।
- IndexedDB API
- ফাইল এবং ব্লব সহ কাঠামোগত ডেটার ক্লায়েন্ট-সাইড স্টোরেজের জন্য একটি নিম্ন-স্তরের API। এই API লেনদেন সংক্রান্ত ডেটা সঞ্চয়স্থান এবং পুনরুদ্ধারের জন্য আদিম প্রদান করে। যদিও এই APIটি প্রায়শই সাধারণ ব্যবহারের ক্ষেত্রে খুব জটিল হয়, তবে এটির উপরে বেশ কয়েকটি তৃতীয় পক্ষের স্টোরেজ সমাধান তৈরি করা হয়।
- ক্যাশেস্টোরেজ API
- রিকোয়েস্ট এবং রেসপন্স অবজেক্ট পেয়ারের জন্য একটি ক্রমাগত স্টোরেজ মেকানিজম। এই APIটি বিশেষভাবে ওয়েব পরিষেবা কর্মীদের জন্য ডিজাইন করা হয়েছে এবং একটি শেষ পয়েন্ট থেকে ডেটা পুনরুদ্ধার করতে ব্যবহৃত হয়। ব্যবহারকারীরা আপ-টু-ডেট ডেটা দেখেন কিনা এবং কতটা গুরুত্বপূর্ণ তার উপর নির্ভর করে এই API ব্যবহার করার বিভিন্ন উপায় রয়েছে। আরও তথ্যের জন্য, অফলাইন কুকবুক দেখুন। যতক্ষণ না আপনি ফেচ হ্যান্ডলারের মাধ্যমে নেটওয়ার্ক অনুরোধগুলি বিশেষভাবে প্রক্সি করছেন, আপনার
chrome.storage
ব্যবহার করা উচিত৷
একটি ন্যূনতম Chrome সংস্করণ চয়ন করুন৷
ম্যানিফেস্ট V3 প্রকাশের পর থেকে, আমরা পরিষেবা কর্মীদের জীবনকালের জন্য বেশ কিছু উন্নতি করেছি। এর মানে হল যে যদি আপনার ম্যানিফেস্ট V3 এক্সটেনশন Chrome-এর পূর্ববর্তী সংস্করণগুলিকে সমর্থন করে, তাহলে এমন কিছু শর্ত রয়েছে যা আপনাকে সচেতন হতে হবে। যদি এই শর্তগুলি আপনার এক্সটেনশনকে প্রভাবিত না করে, তাহলে আপনি এই বিভাগ থেকে এগিয়ে যেতে পারেন। যদি তারা তা করে, আপনার ম্যানিফেস্টে একটি ন্যূনতম Chrome সংস্করণ উল্লেখ করার কথা বিবেচনা করুন৷
ক্রোম 120
পরিষেবা কর্মীর জীবনচক্রের সাথে মেলানোর জন্য অ্যালার্মগুলি এখন ন্যূনতম 30 সেকেন্ডে সেট করা যেতে পারে৷ আরো বিস্তারিত জানার জন্য chrome.alarms
দেখুন।
ক্রোম 118
chrome.debugger
API ব্যবহার করে তৈরি সক্রিয় ডিবাগার সেশনগুলি এখন পরিষেবা কর্মীকে বাঁচিয়ে রাখে৷ এটি পরিষেবা কর্মীদের এই API-এর জন্য কল করার সময় সময় শেষ হতে বাধা দেয়।
ক্রোম 116
Chrome 116 নিম্নলিখিত পরিষেবা কর্মী আজীবন উন্নতি প্রবর্তন করেছে:
সক্রিয়
WebSocket
সংযোগগুলি এখন এক্সটেনশন পরিষেবা কর্মীদের আজীবন প্রসারিত করে৷ একটি এক্সটেনশন পরিষেবা কর্মীরWebSocket
জুড়ে বার্তা পাঠানো বা গ্রহণ করা পরিষেবা কর্মীর নিষ্ক্রিয় টাইমার পুনরায় সেট করে৷এক্সটেনশন পরিষেবা কর্মীদের জন্য অতিরিক্ত এক্সটেনশন APIগুলিকে পাঁচ মিনিটের সময়সীমা অতিক্রম করার অনুমতি দেওয়া হয়৷ এই APIগুলি একটি ব্যবহারকারীর প্রম্পট প্রদর্শন করে এবং এইভাবে সমাধান করতে পাঁচ মিনিটের বেশি সময় লাগতে পারে। এর মধ্যে রয়েছে
desktopCapture.chooseDesktopMedia()
,identity.launchWebAuthFlow()
,management.uninstall()
, এবংpermissions.request()
।
ক্রোম 114
দীর্ঘস্থায়ী মেসেজিং ব্যবহার করে একটি বার্তা পাঠানো পরিষেবা কর্মীকে বাঁচিয়ে রাখে। পূর্বে, একটি পোর্ট খোলার সময় টাইমারগুলি রিসেট করা হত, কিন্তু একটি বার্তা পাঠানো হত না। পোর্ট খোলার ফলে আর টাইমার রিসেট হয় না।
ক্রোম 110
এক্সটেনশন API কল টাইমার রিসেট করে। এর আগে, শুধুমাত্র চলমান ইভেন্ট হ্যান্ডলাররা একজন পরিষেবা কর্মীকে বাঁচিয়ে রাখত। যে কোনো ইভেন্ট যা সারিবদ্ধ ছিল, কিন্তু যার জন্য একজন হ্যান্ডলারকে ডাকা হয়নি সেটি রিসেটের কারণ হবে না।
ক্রোম 109
অফস্ক্রিন ডকুমেন্ট থেকে পাঠানো বার্তা টাইমার রিসেট করে।
ক্রোম 105
chrome.runtime.connectNative()
ব্যবহার করে একটি নেটিভ মেসেজিং হোস্টের সাথে সংযোগ করা একজন পরিষেবা কর্মীকে বাঁচিয়ে রাখবে৷ হোস্ট প্রক্রিয়া ক্র্যাশ বা বন্ধ হলে, পোর্ট বন্ধ করা হয় এবং টাইমার সম্পূর্ণ হওয়ার পরে পরিষেবা কর্মী সমাপ্ত হবে। পোর্টের onDisconnect ইভেন্ট হ্যান্ডলারে chrome.runtime.connectNative()
কল করে এর বিরুদ্ধে সতর্ক থাকুন৷