L'implementazione di script in background non persistenti ridurrà notevolmente il costo delle risorse dell'estensione. La maggior parte delle funzionalità delle estensioni può essere supportata da uno script in background basato su eventi. Solo in rare circostanze un'estensione dovrebbe avere uno sfondo persistente, in quanto consuma costantemente le risorse di sistema e può mettere a dura prova i dispositivi a bassa potenza.
Migliora le prestazioni di un'estensione eseguendo la migrazione di uno script in background persistente a un modello non persistente basato su eventi. Per impostazione predefinita, "persistent" è impostato su true.
Impostare la persistenza su false
Individua la chiave "background" nel file manifest dell'estensione, quindi aggiungi o aggiorna il campo
"persistent" su false.
{
"name": "My extension",
...
"background": {
"scripts": ["background.js"],
"persistent": false
},
...
}
Lo stesso vale per gli script in background che si basano su un file HTML.
{
"name": "My extension",
...
"background": {
"page": "background.html",
"persistent": false
},
...
}
Visualizzare i listener di eventi
I listener devono essere di primo livello per attivare lo script in background se viene attivato un evento importante. I listener registrati potrebbero dover essere ristrutturati in un pattern sincrono. La strutturazione dei listener, come di seguito, non ne consentirà la chiamata perché non sono registrati in modo sincrono.
chrome.storage.local.get('runtimeEvents', function (events) {
for (let event of events)
chrome.runtime[event].addListener(listener);
});
Mantieni invece i listener di primo livello e non nidificati.
chrome.runtime.onStartup.addListener(function() {
// run startup function
})
Registrare le modifiche dello stato nello spazio di archiviazione
Utilizza l'API Storage per impostare e restituire stati e valori. Utilizza local.set per aggiornare la macchina locale.
chrome.storage.local.set({ variable: variableInformation });
Utilizza local.get per recuperare il valore di quella variabile.
chrome.storage.local.get(['variable'], function(result) {
let awesomeVariable = result.variable;
// Do something with awesomeVariable
});
Trasformare i timer in sveglie
I timer basati sul DOM, come window.setTimeout() o window.setInterval(), non vengono rispettati negli script in background non persistenti se vengono attivati quando la pagina dell'evento è inattiva.
let timeout = 1000 * 60 * 3; // 3 minutes in milliseconds
window.setTimeout(function() {
alert('Hello, world!');
}, timeout);
Utilizza invece l'API Alarms.
chrome.alarms.create({delayInMinutes: 3.0})
Quindi aggiungi un listener.
chrome.alarms.onAlarm.addListener(function() {
alert("Hello, world!")
});
Aggiornare le chiamate per le funzioni dello script in background
Se utilizzi extension.getBackgroundPage per chiamare una funzione dalla pagina in background, esegui l'aggiornamento a
runtime.getBackgroundPage. Il metodo più recente attiva lo script non persistente prima di restituirlo.
function backgroundFunction() {
alert('Background, reporting for duty!')
}
document.getElementById('target').addEventListener('click', function(){
chrome.extension.getBackgroundPage().backgroundFunction();
});
Questo metodo non funziona se lo script in background è inattivo, ovvero lo stato predefinito per uno script non persistente. Il metodo più recente include una funzione di callback per garantire che lo script in background sia stato caricato.
document.getElementById('target').addEventListener('click', function() {
chrome.runtime.getBackgroundPage(function(backgroundPage){
backgroundPage.backgroundFunction()
})
});