Использование непостоянных фоновых скриптов значительно снизит потребление ресурсов вашим расширением. Большинство функций расширения можно поддерживать с помощью фонового скрипта, основанного на событиях. Постоянный фоновый скрипт следует использовать лишь в редких случаях , поскольку они постоянно потребляют системные ресурсы и могут создавать нагрузку на маломощные устройства.
Повысьте производительность расширения, переведя фоновый скрипт с постоянным доступом на модель с непостоянным доступом, основанную на событиях. По умолчанию параметр "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()
})
});