La mise en œuvre de scripts d'arrière-plan non persistants réduit 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 peut avoir un arrière-plan persistant que dans de rares circonstances, car elle consomme constamment des ressources système et peut mettre à rude épreuve les appareils de faible puissance.
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 comme fausse
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 reposent 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 premier niveau pour activer le script d'arrière-plan si un événement important est déclenché. Vous devrez peut-être restructurer les écouteurs enregistrés dans un modèle synchrone. Comme indiqué ci-dessous, la structuration des écouteurs ne leur permet 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);
});
Définissez plutôt les écouteurs au niveau supérieur et non imbriqués.
chrome.runtime.onStartup.addListener(function() {
// run startup function
})
Changements d'état d'enregistrement dans l'espace de 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 des minuteurs en alarmes
Les minuteurs basés sur 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!")
});
Appels de mise à jour pour les fonctions de script d'arrière-plan
Si vous utilisez extension.getBackgroundPage
pour appeler une fonction à partir de la page en arrière-plan, effectuez la mise à jour vers 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 en arrière-plan est inactif, c'est-à-dire l'état par défaut d'un script non persistant. La méthode la plus récente inclut une fonction de rappel pour s'assurer que le script en arrière-plan est chargé.
document.getElementById('target').addEventListener('click', function() {
chrome.runtime.getBackgroundPage(function(backgroundPage){
backgroundPage.backgroundFunction()
})
});