Bermigrasi ke skrip latar belakang berbasis peristiwa

Menerapkan skrip latar belakang non-persisten akan mengurangi biaya resource ekstensi Anda secara signifikan. Sebagian besar fungsi ekstensi dapat didukung oleh skrip latar belakang berbasis peristiwa. Hanya dalam kondisi yang jarang terjadi, ekstensi yang boleh memiliki latar belakang persisten, karena ekstensi tersebut terus-menerus menggunakan resource sistem dan dapat menyebabkan ketegangan pada perangkat yang menggunakan daya lebih rendah.

Tingkatkan performa ekstensi dengan memigrasikan skrip latar belakang yang persisten ke model non-persisten berbasis peristiwa. Secara default, "persistent" ditetapkan ke true (benar).

Menetapkan persistensi sebagai false

Cari kunci "background" di file manifes ekstensi, lalu tambahkan atau perbarui kolom "persistent" ke salah (false).

{
  "name": "My extension",
  ...
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  ...
}

Hal yang sama berlaku untuk skrip latar belakang yang bergantung pada file HTML.

{
  "name": "My extension",
  ...
  "background": {
    "page": "background.html",
    "persistent": false
  },
  ...
}

Memunculkan pemroses peristiwa

Pemroses harus berada di level teratas untuk mengaktifkan skrip latar belakang jika peristiwa penting dipicu. Pemroses terdaftar mungkin perlu dibentuk ulang ke pola sinkron. Membuat struktur pemroses, seperti di bawah, tidak akan mengizinkan pemroses tersebut dipanggil karena tidak terdaftar secara sinkron.

chrome.storage.local.get('runtimeEvents', function (events) {
  for (let event of events)
    chrome.runtime[event].addListener(listener);
});

Sebagai gantinya, pertahankan pemroses di level teratas dan tidak bertingkat.

chrome.runtime.onStartup.addListener(function() {
  // run startup function
})

Mencatat perubahan status di penyimpanan

Gunakan storage API untuk menetapkan dan menampilkan status dan nilai. Gunakan local.set untuk mengupdate di komputer lokal.

  chrome.storage.local.set({ variable: variableInformation });

Gunakan local.get untuk mengambil nilai variabel tersebut.

chrome.storage.local.get(['variable'], function(result) {
  let awesomeVariable = result.variable;
  // Do something with awesomeVariable
});

Mengubah timer menjadi alarm

Timer berbasis DOM, seperti window.setTimeout() atau window.setInterval(), tidak diterapkan dalam skrip latar belakang non-persisten jika dipicu saat halaman peristiwa tidak aktif.

let timeout = 1000 * 60 * 3;  // 3 minutes in milliseconds
window.setTimeout(function() {
  alert('Hello, world!');
}, timeout);

Sebagai gantinya, gunakan API alarm.

chrome.alarms.create({delayInMinutes: 3.0})

Kemudian, tambahkan pemroses.

chrome.alarms.onAlarm.addListener(function() {
  alert("Hello, world!")
});

Mengupdate panggilan untuk fungsi skrip latar belakang

Jika menggunakan extension.getBackgroundPage untuk memanggil fungsi dari halaman latar belakang, update ke runtime.getBackgroundPage. Metode yang lebih baru akan mengaktifkan skrip non-persisten sebelum menampilkannya.

function backgroundFunction() {
  alert('Background, reporting for duty!')
}
document.getElementById('target').addEventListener('click', function(){
  chrome.extension.getBackgroundPage().backgroundFunction();
});

Metode ini tidak akan berfungsi jika skrip latar belakang tidak aktif, yang merupakan status default untuk skrip yang tidak persisten. Metode yang lebih baru menyertakan fungsi callback untuk memastikan skrip latar belakang telah dimuat.

document.getElementById('target').addEventListener('click', function() {
  chrome.runtime.getBackgroundPage(function(backgroundPage){
    backgroundPage.backgroundFunction()
  })
});