एक्सटेंशन सर्विस वर्कर का लाइफ़साइकल

एक्सटेंशन के सर्विस वर्कर, स्टैंडर्ड सर्विस वर्कर इवेंट और एक्सटेंशन नेमस्पेस में मौजूद इवेंट, दोनों के लिए जवाब देते हैं. इन्हें एक साथ दिखाया जाता है, क्योंकि अक्सर एक्सटेंशन का इस्तेमाल करते समय एक टाइप के बाद दूसरा टाइप दिखता है.

इंस्टॉल करना

सर्विस वर्कर तब इंस्टॉल होता है, जब उपयोगकर्ता Chrome Web Store से उसे इंस्टॉल या अपडेट करता है. इसके अलावा, जब उपयोगकर्ता chrome://extensions पेज का इस्तेमाल करके, अनपैक किए गए एक्सटेंशन को लोड या अपडेट करता है, तब भी सर्विस वर्कर इंस्टॉल होता है. तीन इवेंट इस क्रम में होते हैं:

  1. install
  2. onInstall
  3. activate

ServiceWorkerRegistration.install

इंस्टॉलेशन के दौरान ट्रिगर होने वाला पहला इवेंट, वेब सर्विस वर्कर का install इवेंट होता है.

chrome.runtime.onInstalled

इसके बाद, एक्सटेंशन का 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

आखिर में, सर्विस वर्कर का activate इवेंट ट्रिगर होता है. ध्यान दें कि वेब सर्विस वर्कर के उलट, यह इवेंट एक्सटेंशन इंस्टॉल होने के तुरंत बाद ट्रिगर हो जाता है. ऐसा इसलिए होता है, क्योंकि एक्सटेंशन में पेज रीलोड करने जैसा कुछ नहीं होता.

एक्सटेंशन स्टार्टअप

जब कोई उपयोगकर्ता प्रोफ़ाइल शुरू होती है, तब chrome.runtime.onStartup इवेंट ट्रिगर होता है. हालांकि, कोई भी सर्विस वर्कर इवेंट शुरू नहीं होता.

डिवाइस के कुछ समय से इस्तेमाल में न होने और शटडाउन होने से जुड़ी जानकारी

आम तौर पर, Chrome इन शर्तों में से कोई एक पूरी होने पर, सेवा देने वाले वर्कर को बंद कर देता है:

  • 30 सेकंड तक कोई गतिविधि न होने पर. कोई इवेंट मिलने या एक्सटेंशन एपीआई को कॉल करने पर, यह टाइमर रीसेट हो जाता है.
  • जब किसी एक अनुरोध, जैसे कि इवेंट या एपीआई कॉल को प्रोसेस करने में पांच मिनट से ज़्यादा समय लगता है.
  • जब fetch() से मिलने वाले जवाब में 30 सेकंड से ज़्यादा समय लगता है.

इवेंट और एक्सटेंशन एपीआई को किए गए कॉल से ये टाइमर रीसेट हो जाते हैं. अगर सर्विस वर्कर बंद हो गया है, तो आने वाला कोई इवेंट उसे फिर से चालू कर देगा. हालांकि, आपको अपने सर्विस वर्कर को इस तरह से डिज़ाइन करना चाहिए कि वह अचानक बंद होने की स्थिति में भी काम कर सके.

अपने एक्सटेंशन के संसाधन इस्तेमाल करने की दर को ऑप्टिमाइज़ करने के लिए, अगर हो सके, तो अपने सर्विस वर्कर को हमेशा चालू न रखें. अपने एक्सटेंशन की जांच करें, ताकि यह पक्का किया जा सके कि ऐसा गलती से नहीं हो रहा है.

ग्लोबल वैरिएबल का इस्तेमाल करने के बजाय, डेटा को सेव करना

अगर सर्विस वर्कर बंद हो जाता है, तो सेट किए गए सभी ग्लोबल वैरिएबल मिट जाएंगे. ग्लोबल वैरिएबल का इस्तेमाल करने के बजाय, वैल्यू को स्टोरेज में सेव करें. आपके पास उपलब्ध विकल्प यहां दिए गए हैं.

chrome.storage API
यह एक एक्सटेंशन एपीआई है, जो कई तरह के स्टोरेज की सुविधा देता है. जैसे, लोकल, सेशन, मैनेज किया गया (डोमेन), और सिंक किया गया स्टोरेज. यह एपीआई, डेवलपर की ओर से तय की गई कुंजियों की मदद से पहचाने गए और वापस पाए गए JSON ऑब्जेक्ट को सेव करता है. जब कोई उपयोगकर्ता वेब कैश मेमोरी को मिटाता है, तब इस तरह के स्टोरेज को नहीं हटाया जाता.
IndexedDB API
यह क्लाइंट-साइड पर स्ट्रक्चर्ड डेटा को सेव करने के लिए, लो-लेवल एपीआई है. इसमें फ़ाइलें और ब्लॉब शामिल हैं. यह एपीआई, लेन-देन से जुड़े डेटा को सेव करने और वापस पाने के लिए प्रिमिटिव उपलब्ध कराता है. हालांकि, इस्तेमाल के कुछ उदाहरणों के लिए यह एपीआई अक्सर बहुत जटिल होता है, लेकिन कई तीसरे पक्ष के स्टोरेज समाधान इसी पर आधारित होते हैं.
CacheStorage API
अनुरोध और जवाब के ऑब्जेक्ट पेयर के लिए, लगातार स्टोरेज की सुविधा. इस एपीआई को खास तौर पर वेब सर्विस वर्कर के लिए डिज़ाइन किया गया था. इसका इस्तेमाल, एंडपॉइंट से डेटा पाने के लिए किया जाता है. इस एपीआई का इस्तेमाल कई तरीकों से किया जा सकता है. यह इस बात पर निर्भर करता है कि उपयोगकर्ताओं को अप-टू-डेट डेटा दिखाना कितना ज़रूरी है. ज़्यादा जानकारी के लिए, The Offline Cookbook देखें. अगर फ़ेच हैंडलर का इस्तेमाल करके नेटवर्क अनुरोधों को प्रॉक्सी नहीं किया जा रहा है, तो आपको chrome.storage का इस्तेमाल करना चाहिए.

Chrome का कम से कम वर्शन चुनें

Manifest V3 के रिलीज़ होने के बाद से, हमने सर्विस वर्कर के लाइफ़टाइम में कई सुधार किए हैं. इसका मतलब है कि अगर आपका मेनिफ़ेस्ट V3 एक्सटेंशन, Chrome के पुराने वर्शन के साथ काम करता है, तो आपको कुछ शर्तों के बारे में पता होना चाहिए. अगर इन शर्तों का असर आपके एक्सटेंशन पर नहीं पड़ता है, तो इस सेक्शन को छोड़कर आगे बढ़ें. अगर ऐसा होता है, तो अपने मेनिफ़ेस्ट में Chrome का सबसे कम वर्शन तय करें.

Chrome 120

अब अलार्म को कम से कम 30 सेकंड के लिए सेट किया जा सकता है, ताकि यह सर्विस वर्कर के लाइफ़साइकल से मेल खाए. ज़्यादा जानकारी के लिए, chrome.alarms पर जाएं.

Chrome 118

chrome.debugger एपीआई का इस्तेमाल करके बनाए गए ऐक्टिव डीबगर सेशन, अब सर्विस वर्कर को चालू रखते हैं. इससे, इस एपीआई के लिए कॉल के दौरान सेवा देने वाले वर्कर का टाइम आउट नहीं होता.

Chrome 116

Chrome 116 में, सर्विस वर्कर के लाइफ़टाइम को बेहतर बनाने के लिए ये बदलाव किए गए हैं:

  • चालू WebSocket कनेक्शन अब एक्सटेंशन के सर्विस वर्कर के लाइफ़टाइम को बढ़ाते हैं. एक्सटेंशन सर्विस वर्कर में WebSocket के ज़रिए मैसेज भेजने या पाने पर, सर्विस वर्कर का आइडल टाइमर रीसेट हो जाता है.

  • एक्सटेंशन के सेवा वर्कर के लिए, पांच मिनट की समयसीमा खत्म होने के बाद भी एक्सटेंशन के अन्य एपीआई काम कर सकते हैं. ये एपीआई, उपयोगकर्ता को प्रॉम्प्ट दिखाते हैं. इसलिए, इन्हें ठीक होने में पांच मिनट से ज़्यादा समय लग सकता है. इनमें desktopCapture.chooseDesktopMedia(), identity.launchWebAuthFlow(), management.uninstall(), और permissions.request() शामिल हैं.

Chrome 114

लंबे समय तक चलने वाली मैसेजिंग की मदद से मैसेज भेजने पर, सर्विस वर्कर चालू रहता है. पोर्ट खोलने पर, अब टाइमर रीसेट नहीं होते.

Chrome 110

एक्सटेंशन एपीआई कॉल, टाइमर को रीसेट कर देते हैं. इससे पहले, सिर्फ़ चालू इवेंट हैंडलर, सर्विस वर्कर को चालू रखते थे. जिन इवेंट को कतार में रखा गया था, लेकिन जिनके लिए हैंडलर को कॉल नहीं किया गया था उनसे रीसेट नहीं होगा.

Chrome 109

स्क्रीन पर न दिखने वाले दस्तावेज़ से भेजे गए मैसेज, टाइमर को रीसेट कर देते हैं.

Chrome 105

chrome.runtime.connectNative() का इस्तेमाल करके, नेटिव मैसेजिंग होस्ट से कनेक्ट करने पर सर्विस वर्कर चालू रहेगा. अगर होस्ट प्रोसेस क्रैश हो जाती है या बंद हो जाती है, तो पोर्ट बंद हो जाता है. साथ ही, टाइमर पूरा होने के बाद सर्विस वर्कर बंद हो जाएगा. इससे बचने के लिए, पोर्ट के onDisconnect इवेंट हैंडलर में chrome.runtime.connectNative() को कॉल करें.