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

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

इंस्टॉलेशन

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

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

ServiceWorkerRegistration.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 सेकंड से ज़्यादा समय लगता है.

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

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

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

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

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

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

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

Chrome का वर्शन 120

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

Chrome का वर्शन 118

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

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() को कॉल करें.