Реализация непостоянных фоновых сценариев значительно снизит стоимость ресурсов вашего расширения. Большинство функций расширения могут поддерживаться фоновым сценарием на основе событий. Только в редких случаях расширения должны иметь постоянный фон, поскольку они постоянно потребляют системные ресурсы и могут вызвать нагрузку на устройства с низким энергопотреблением.
Повысьте производительность расширения, перенеся постоянный фоновый сценарий в непостоянную модель на основе событий. По умолчанию для параметра "persistent"
установлено значение true.
Обозначить постоянство как ложное
Найдите ключ "background"
в файле манифеста расширения, затем добавьте или обновите поле "persistent"
до значения false.
{
"name": "My extension",
...
"background": {
"scripts": ["background.js"],
"persistent": false
},
...
}
То же самое относится и к фоновым сценариям, использующим HTML-файл.
{
"name": "My extension",
...
"background": {
"page": "background.html",
"persistent": false
},
...
}
Слушатели событий поверхности
Слушатели должны находиться на верхнем уровне, чтобы активировать фоновый сценарий в случае срабатывания важного события. Зарегистрированные прослушиватели, возможно, потребуется перестроить на синхронный шаблон. Структурирование прослушивателей, как показано ниже, не позволит их вызывать, поскольку они не зарегистрированы синхронно.
chrome.storage.local.get('runtimeEvents', function (events) {
for (let event of events)
chrome.runtime[event].addListener(listener);
});
Вместо этого держите слушателей на верхнем уровне и не вложенными.
chrome.runtime.onStartup.addListener(function() {
// run startup function
})
Запись изменений состояния в хранилище
Используйте API хранилища для установки и возврата состояний и значений. Используйте local.set
для обновления на локальном компьютере.
chrome.storage.local.set({ variable: variableInformation });
Используйте local.get
чтобы получить значение этой переменной.
chrome.storage.local.get(['variable'], function(result) {
let awesomeVariable = result.variable;
// Do something with awesomeVariable
});
Превратите таймеры в будильники
Таймеры на основе DOM, такие как window.setTimeout()
или window.setInterval()
, не учитываются в непостоянных фоновых сценариях, если они срабатывают, когда страница событий неактивна.
let timeout = 1000 * 60 * 3; // 3 minutes in milliseconds
window.setTimeout(function() {
alert('Hello, world!');
}, timeout);
Вместо этого используйте API сигналов тревоги .
chrome.alarms.create({delayInMinutes: 3.0})
Затем добавьте прослушиватель.
chrome.alarms.onAlarm.addListener(function() {
alert("Hello, world!")
});
Обновление вызовов функций фонового сценария
Если вы используете extension.getBackgroundPage
для вызова функции с фоновой страницы, обновите его до runtime.getBackgroundPage
. Новый метод активирует непостоянный сценарий перед его возвратом.
function backgroundFunction() {
alert('Background, reporting for duty!')
}
document.getElementById('target').addEventListener('click', function(){
chrome.extension.getBackgroundPage().backgroundFunction();
});
Этот метод не будет работать, если фоновый сценарий неактивен, что является состоянием по умолчанию для непостоянного сценария. Новый метод включает функцию обратного вызова, гарантирующую загрузку фонового сценария.
document.getElementById('target').addEventListener('click', function() {
chrome.runtime.getBackgroundPage(function(backgroundPage){
backgroundPage.backgroundFunction()
})
});