L'implémentation de scripts d'arrière-plan non persistants réduira considérablement le coût des ressources de votre extension. La plupart des fonctionnalités d'extension peuvent être compatibles avec un script d'arrière-plan basé sur des événements. Une extension ne doit avoir un arrière-plan persistant que dans de rares circonstances, car elle consomme constamment des ressources système et peut solliciter les appareils moins puissants.
Améliorez les performances d'une extension en migrant un script d'arrière-plan persistant vers un modèle non persistant basé sur des événements. Par défaut, "persistent" est défini sur "true".
Définir la persistance sur "false"
Recherchez la clé "background" dans le fichier manifest de l'extension, puis ajoutez ou mettez à jour le champ
"persistent" sur "false".
{
"name": "My extension",
...
"background": {
"scripts": ["background.js"],
"persistent": false
},
...
}
Il en va de même pour les scripts d'arrière-plan qui s'appuient sur un fichier HTML.
{
"name": "My extension",
...
"background": {
"page": "background.html",
"persistent": false
},
...
}
Écouteurs d'événements de surface
Les écouteurs doivent se trouver au niveau supérieur pour activer le script d'arrière-plan si un événement important est déclenché. Les écouteurs enregistrés devront peut-être être restructurés selon un modèle synchrone. La structuration des écouteurs, comme ci-dessous, ne leur permettra pas d'être appelés, car ils ne sont pas enregistrés de manière synchrone.
chrome.storage.local.get('runtimeEvents', function (events) {
for (let event of events)
chrome.runtime[event].addListener(listener);
});
Conservez plutôt les écouteurs au niveau supérieur et non imbriqués.
chrome.runtime.onStartup.addListener(function() {
// run startup function
})
Enregistrer les changements d'état dans le stockage
Utilisez l'API Storage pour définir et renvoyer des états et des valeurs. Utilisez local.set pour effectuer la mise à jour sur la machine locale.
chrome.storage.local.set({ variable: variableInformation });
Utilisez local.get pour récupérer la valeur de cette variable.
chrome.storage.local.get(['variable'], function(result) {
let awesomeVariable = result.variable;
// Do something with awesomeVariable
});
Transformer les minuteurs en alarmes
Les minuteurs basés sur le DOM, tels que window.setTimeout() ou window.setInterval(), ne sont pas respectés dans les scripts d'arrière-plan non persistants s'ils se déclenchent lorsque la page d'événement est inactive.
let timeout = 1000 * 60 * 3; // 3 minutes in milliseconds
window.setTimeout(function() {
alert('Hello, world!');
}, timeout);
Utilisez plutôt l'API Alarms.
chrome.alarms.create({delayInMinutes: 3.0})
Ajoutez ensuite un écouteur.
chrome.alarms.onAlarm.addListener(function() {
alert("Hello, world!")
});
Mettre à jour les appels pour les fonctions de script d'arrière-plan
Si vous utilisez extension.getBackgroundPage pour appeler une fonction à partir de la page d'arrière-plan, passez à
runtime.getBackgroundPage. La méthode la plus récente active le script non persistant avant de le renvoyer.
function backgroundFunction() {
alert('Background, reporting for duty!')
}
document.getElementById('target').addEventListener('click', function(){
chrome.extension.getBackgroundPage().backgroundFunction();
});
Cette méthode ne fonctionne pas si le script d'arrière-plan est inactif, ce qui est l'état par défaut pour un script non persistant. La méthode la plus récente inclut une fonction de rappel pour s'assurer que le script d'arrière-plan a été chargé.
document.getElementById('target').addEventListener('click', function() {
chrome.runtime.getBackgroundPage(function(backgroundPage){
backgroundPage.backgroundFunction()
})
});