नॉन-परसिस्टेंट बैकग्राउंड स्क्रिप्ट लागू करने से, आपके एक्सटेंशन के संसाधन की लागत में काफ़ी कमी आएगी. ज़्यादातर एक्सटेंशन फ़ंक्शन को इवेंट पर आधारित बैकग्राउंड स्क्रिप्ट से सपोर्ट किया जा सकता है. एक्सटेंशन को बैकग्राउंड में लगातार सिर्फ़ खास मामलों में ही चलना चाहिए. ऐसा इसलिए, क्योंकि वे लगातार सिस्टम के संसाधनों का इस्तेमाल करते हैं. साथ ही, कम पावर वाले डिवाइसों पर ज़्यादा लोड डाल सकते हैं.
लगातार चलने वाली बैकग्राउंड स्क्रिप्ट को इवेंट पर आधारित, लगातार न चलने वाले मॉडल पर माइग्रेट करके, एक्सटेंशन की परफ़ॉर्मेंस को बेहतर बनाएं. डिफ़ॉल्ट रूप से, "persistent" को सही पर सेट किया जाता है.
परसिस्टेंस को 'गलत है' के तौर पर सेट करें
एक्सटेंशन की मेनिफ़ेस्ट फ़ाइल में "background" कुंजी ढूंढें. इसके बाद, "persistent" फ़ील्ड को false पर सेट करें या उसे अपडेट करें.
{
"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
})
स्टोरेज में बदलावों की स्थिति रिकॉर्ड करना
स्टेट और वैल्यू सेट करने और उन्हें वापस पाने के लिए, स्टोरेज एपीआई का इस्तेमाल करें. स्थानीय मशीन पर अपडेट करने के लिए, 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
});
टाइमर को अलार्म में बदलना
अगर इवेंट पेज के बंद होने पर, DOM पर आधारित टाइमर (जैसे, window.setTimeout() या window.setInterval()) ट्रिगर होते हैं, तो उन्हें नॉन-परसिस्टेंट बैकग्राउंड स्क्रिप्ट में नहीं माना जाता.
let timeout = 1000 * 60 * 3; // 3 minutes in milliseconds
window.setTimeout(function() {
alert('Hello, world!');
}, timeout);
इसके बजाय, अलार्म एपीआई का इस्तेमाल करें.
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()
})
});