इवेंट-ड्रिवन बैकग्राउंड स्क्रिप्ट पर माइग्रेट करें

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

एक्सटेंशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए, स्थायी बैकग्राउंड स्क्रिप्ट को इवेंट पर आधारित नॉन-परसिस्टेंट मॉडल में माइग्रेट करें. डिफ़ॉल्ट रूप से, "persistent" 'सही' पर सेट होता है.

परसिस्टेंस को 'गलत' के तौर पर सेट करें

एक्सटेंशन मेनिफ़ेस्ट फ़ाइल में "background" कुंजी ढूंढें. इसके बाद, "persistent" फ़ील्ड को 'गलत' पर जोड़ें या अपडेट करें.

{
  "name": "My extension",
  ...
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  ...
}

यही बात उन बैकग्राउंड स्क्रिप्ट पर भी लागू होती है जो एचटीएमएल फ़ाइल का इस्तेमाल करती हैं.

{
  "name": "My extension",
  ...
  "background": {
    "page": "background.html",
    "persistent": false
  },
  ...
}

इवेंट लिसनर को दिखाएं

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

chrome.storage.local.get('runtimeEvents', function (events) {
  for (let event of events)
    chrome.runtime[event].addListener(listener);
});

इसके बजाय, लिसनर को टॉप लेवल पर रखें और उन्हें बिना नेस्ट किए ही सुनें.

chrome.runtime.onStartup.addListener(function() {
  // run startup function
})

स्टोरेज के स्टेटस में हुए बदलावों को रिकॉर्ड करें

स्टेट और वैल्यू को सेट करने और लौटाने के लिए, storage API का इस्तेमाल करें. लोकल मशीन पर अपडेट करने के लिए, local.set का इस्तेमाल करें.

  chrome.storage.local.set({ variable: variableInformation });

उस वैरिएबल की वैल्यू पाने के लिए, local.get का इस्तेमाल करें.

chrome.storage.local.get(['variable'], function(result) {
  let awesomeVariable = result.variable;
  // Do something with awesomeVariable
});

टाइमर को अलार्म में बदलें

अगर इवेंट पेज के डॉरमेंट होने पर ट्रिगर होता है, तो window.setTimeout() या window.setInterval() जैसे DOM-आधारित टाइमर को स्थायी बैकग्राउंड स्क्रिप्ट में लागू नहीं किया जाता.

let timeout = 1000 * 60 * 3;  // 3 minutes in milliseconds
window.setTimeout(function() {
  alert('Hello, world!');
}, timeout);

इसके बजाय, alarms API का इस्तेमाल करें.

chrome.alarms.create({delayInMinutes: 3.0})

इसके बाद, लिसनर जोड़ें.

chrome.alarms.onAlarm.addListener(function() {
  alert("Hello, world!")
});

बैकग्राउंड स्क्रिप्ट फ़ंक्शन के लिए कॉल अपडेट करें

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

function backgroundFunction() {
  alert('Background, reporting for duty!')
}
document.getElementById('target').addEventListener('click', function(){
  chrome.extension.getBackgroundPage().backgroundFunction();
});

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

document.getElementById('target').addEventListener('click', function() {
  chrome.runtime.getBackgroundPage(function(backgroundPage){
    backgroundPage.backgroundFunction()
  })
});