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

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

इंस्टॉल करना

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

  1. install (सर्विस वर्कर इवेंट)
  2. browser.runtime.onInstalled (एक्सटेंशन इवेंट)
  3. activate (सर्विस वर्कर इवेंट)

ServiceWorkerRegistration.install

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

browser.runtime.onInstalled

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

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

ServiceWorkerRegistration.active

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

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

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

कुछ समय से इस्तेमाल में नहीं है और बंद है

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

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

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

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

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

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

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

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

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

Chrome 120

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

Chrome 118

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

Chrome 116

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

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

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

Chrome 114

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

Chrome 110

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

Chrome 109

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

Chrome 105

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