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
},
...
}
Luisteraars voor oppervlaktegebeurtenissen
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()
})
});