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

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

इंस्टॉल करना

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

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

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

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

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

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

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

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

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

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

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

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

chrome.storage API
ऐसा एक्सटेंशन एपीआई जो कई तरह के स्टोरेज की सुविधा देता है; लोकल, सेशन, मैनेज किया जा रहा (डोमेन), और सिंक. यह एपीआई, डेवलपर की ओर से तय की गई कुंजियों की मदद से पहचाने और वापस लाए गए JSON ऑब्जेक्ट को सेव करता है. जब उपयोगकर्ता वेब कैश को साफ़ करता है, तब इस तरह का स्टोरेज नहीं हटाया जाएगा.
IndexedDB 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() का इस्तेमाल करके, नेटिव मैसेजिंग होस्ट से कनेक्ट करने पर सर्विस वर्कर चालू रहेगा. अगर होस्ट प्रोसेस बंद हो जाती है या बंद हो जाती है, तो पोर्ट बंद हो जाता है. साथ ही, टाइमर पूरा होने के बाद सर्विस वर्कर बंद हो जाता है. इस समस्या से बचने के लिए, पोर्ट के onडिस कनेक्ट इवेंट हैंडलर में chrome.runtime.connectNative() को कॉल करें.