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

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

इंस्टॉल करना

इंस्टॉलेशन तब होता है जब उपयोगकर्ता Chrome वेब स्टोर से किसी सर्विस वर्कर को इंस्टॉल या अपडेट करता है या जब वे 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 एपीआई
एक एक्सटेंशन एपीआई, जो कई तरह का स्टोरेज उपलब्ध कराता है: लोकल, सेशन, मैनेज किया गया (डोमेन), और सिंक. यह एपीआई, डेवलपर की तय की गई कुंजियों की मदद से पहचाने गए और वापस लाए गए 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() का इस्तेमाल करके नेटिव मैसेजिंग होस्ट से कनेक्ट करने पर, सर्विस वर्कर चालू रहेगा. अगर होस्ट प्रोसेस क्रैश हो जाती है या बंद हो जाती है, तो पोर्ट बंद हो जाता है और टाइमर खत्म होने के बाद, सेवा वर्कर बंद हो जाएगा. इससे बचने के लिए, पोर्ट के onडिसकनेक्ट इवेंट हैंडलर में chrome.runtime.connectNative() को कॉल करें.