Переход на фоновые сценарии, управляемые событиями

Реализация непостоянных фоновых сценариев значительно снизит стоимость ресурсов вашего расширения. Большинство функций расширения могут поддерживаться фоновым сценарием на основе событий. Только в редких случаях расширения должны иметь постоянный фон, поскольку они постоянно потребляют системные ресурсы и могут вызвать нагрузку на устройства с низким энергопотреблением.

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