Esegui la migrazione agli script in background basati su eventi

L'implementazione di script in background non persistenti ridurrà notevolmente il costo delle risorse della tua estensione. La maggior parte delle funzionalità dell'estensione 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ò causare un sovraccarico sui dispositivi meno potenti.

Migliora le prestazioni di un'estensione eseguendo la migrazione di uno script in background permanente a un modello non persistente basato su eventi. Per impostazione predefinita, "persistent" è impostato su true.

Specifica la persistenza come "false"

Individua la chiave "background" nel file manifest dell'estensione, quindi aggiungi o aggiorna il campo "persistent" in 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
  },
  ...
}

Listener di eventi della superficie

Gli ascoltatori devono trovarsi al primo livello per attivare lo script in background se viene attivato un evento importante. Potrebbe essere necessario ridisporre i listener registrati in un pattern sincrono. La struttura degli ascoltatori, come mostrato di seguito, non consente di invocarli 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 gli ascoltatori al livello superiore 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 l'aggiornamento sulla macchina locale.

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

Usa local.get per recuperare il valore di questa variabile.

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

Trasformare i timer in sveglie

I timer basati su DOM, come window.setTimeout() o window.setInterval(), non vengono rispettati negli script in background non persistenti se si attivano 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})

Poi aggiungi un ascoltatore.

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

Aggiornamento chiamate per le funzioni di script in background

Se utilizzi extension.getBackgroundPage per chiamare una funzione dalla pagina in background, aggiorna 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 non è attivo, che è lo stato predefinito per uno script non persistente. Il metodo più recente include una funzione di callback per assicurarsi che lo script in background sia stato caricato.

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