Migreer naar gebeurtenisgestuurde achtergrondscripts

Het implementeren van niet-persistente achtergrondscripts zal de resourcekosten van uw extensie aanzienlijk verlagen. De meeste extensiefunctionaliteit kan worden ondersteund door een op gebeurtenissen gebaseerd achtergrondscript. Alleen onder zeldzame omstandigheden mag een extensie een persistente achtergrond hebben, omdat deze voortdurend systeembronnen verbruikt en apparaten met een lager vermogen kan belasten.

Verbeter de prestaties van een extensie door een persistent achtergrondscript te migreren naar een op gebeurtenissen gebaseerd, niet-persistent model. Standaard is "persistent" ingesteld op waar.

Benoem persistentie als onwaar

Zoek de "background" sleutel in het manifestbestand van de extensie en voeg vervolgens het veld "persistent" toe of update deze naar false.

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

Hetzelfde geldt voor achtergrondscripts die afhankelijk zijn van een HTML-bestand.

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

Surface-gebeurtenislisteners

Luisteraars moeten zich op het hoogste niveau bevinden om het achtergrondscript te activeren als een belangrijke gebeurtenis wordt geactiveerd. Geregistreerde luisteraars moeten mogelijk worden geherstructureerd naar een synchroon patroon. Door luisteraars te structureren, zoals hieronder, kunnen ze niet worden aangeroepen omdat ze niet synchroon worden geregistreerd.

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

Houd in plaats daarvan luisteraars op het hoogste niveau en niet genest.

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

Registreer statuswijzigingen in de opslag

Gebruik de opslag-API om staten en waarden in te stellen en te retourneren. Gebruik local.set om bij te werken op de lokale machine.

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

Gebruik local.get om de waarde van die variabele te achterhalen.

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

Transformeer timers in alarmen

Op DOM gebaseerde timers, zoals window.setTimeout() of window.setInterval() , worden niet gerespecteerd in niet-persistente achtergrondscripts als ze worden geactiveerd wanneer de gebeurtenispagina inactief is.

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

Gebruik in plaats daarvan de alarm-API .

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

Voeg dan een luisteraar toe.

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

Update-oproepen voor achtergrondscriptfuncties

Als u extension.getBackgroundPage gebruikt om een ​​functie vanaf de achtergrondpagina aan te roepen, update dan naar runtime.getBackgroundPage . De nieuwere methode activeert het niet-persistente script voordat het wordt geretourneerd.

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

Deze methode werkt niet als het achtergrondscript inactief is, wat de standaardstatus is voor een niet-persistent script. De nieuwere methode bevat een callback-functie om ervoor te zorgen dat het achtergrondscript is geladen.

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