Wenn Sie nicht persistente Hintergrundscripts implementieren, werden die Ressourcenkosten Ihrer Erweiterung erheblich reduziert. Die meisten Erweiterungsfunktionen können von einem ereignisbasierten Hintergrundskript unterstützt werden. Nur in sehr seltenen Fällen sollte eine Erweiterung einen persistenten Hintergrund haben, da sie ständig Systemressourcen verbraucht und Geräte mit geringerer Leistung belasten kann.
Sie können die Leistung einer Erweiterung verbessern, indem Sie ein persistentes Hintergrundskript in ein ereignisbasiertes nicht persistentes Modell migrieren. Standardmäßig ist "persistent"
auf „wahr“ festgelegt.
„persistence“ auf „false“ setzen
Suchen Sie in der manifest der Erweiterung nach dem Schlüssel "background"
und fügen Sie das Feld "persistent"
hinzu oder aktualisieren Sie es auf „false“.
{
"name": "My extension",
...
"background": {
"scripts": ["background.js"],
"persistent": false
},
...
}
Dasselbe gilt für Hintergrundscripts, die auf einer HTML-Datei basieren.
{
"name": "My extension",
...
"background": {
"page": "background.html",
"persistent": false
},
...
}
Oberflächenereignis-Listener
Listener müssen sich auf oberster Ebene befinden, damit das Hintergrundskript aktiviert wird, wenn ein wichtiges Ereignis ausgelöst wird. Registrierte Listener müssen möglicherweise in ein synchrones Muster umstrukturiert werden. Wenn Sie Listener wie unten beschrieben strukturieren, können sie nicht aufgerufen werden, da sie nicht synchron registriert sind.
chrome.storage.local.get('runtimeEvents', function (events) {
for (let event of events)
chrome.runtime[event].addListener(listener);
});
Belassen Sie die Zuhörer stattdessen auf der obersten Ebene und heben Sie ihre Verschachtelung auf.
chrome.runtime.onStartup.addListener(function() {
// run startup function
})
Statusänderungen im Speicher aufzeichnen
Verwenden Sie die Storage API, um Status und Werte festzulegen und zurückzugeben. Verwenden Sie local.set
, um auf dem lokalen Computer zu aktualisieren.
chrome.storage.local.set({ variable: variableInformation });
Verwenden Sie local.get
, um den Wert dieser Variablen abzurufen.
chrome.storage.local.get(['variable'], function(result) {
let awesomeVariable = result.variable;
// Do something with awesomeVariable
});
Timer in Wecker umwandeln
DOM-basierte Timer wie window.setTimeout()
oder window.setInterval()
werden in nicht persistenten Hintergrundskripten nicht berücksichtigt, wenn sie ausgelöst werden, wenn die Ereignisseite inaktiv ist.
let timeout = 1000 * 60 * 3; // 3 minutes in milliseconds
window.setTimeout(function() {
alert('Hello, world!');
}, timeout);
Verwenden Sie stattdessen die Alarms API.
chrome.alarms.create({delayInMinutes: 3.0})
Fügen Sie dann einen Listener hinzu.
chrome.alarms.onAlarm.addListener(function() {
alert("Hello, world!")
});
Aufrufe für Hintergrundskriptfunktionen aktualisieren
Wenn Sie extension.getBackgroundPage
verwenden, um eine Funktion über die Hintergrundseite aufzurufen, aktualisieren Sie sie auf runtime.getBackgroundPage
. Bei der neueren Methode wird das nicht persistente Script aktiviert, bevor es zurückgegeben wird.
function backgroundFunction() {
alert('Background, reporting for duty!')
}
document.getElementById('target').addEventListener('click', function(){
chrome.extension.getBackgroundPage().backgroundFunction();
});
Diese Methode funktioniert nicht, wenn das Hintergrundskript inaktiv ist. Das ist der Standardstatus für ein nicht persistentes Script. Die neuere Methode enthält eine Callback-Funktion, die dafür sorgt, dass das Hintergrundskript geladen wurde.
document.getElementById('target').addEventListener('click', function() {
chrome.runtime.getBackgroundPage(function(backgroundPage){
backgroundPage.backgroundFunction()
})
});