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

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

इंस्टॉल करना

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

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

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

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

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

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

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

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

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

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

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

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

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

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

मेनिफ़ेस्ट वर्शन 3 के रिलीज़ होने के बाद, हमने सेवा वर्कर के लाइफ़टाइम में कई सुधार किए हैं. इसका मतलब है कि अगर आपका मेनिफ़ेस्ट 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() को कॉल करके, इस समस्या से बचें.