Bermigrasi ke skrip latar belakang berbasis peristiwa

Mengimplementasikan skrip latar belakang non-persisten akan sangat mengurangi biaya resource ekstensi Anda. Sebagian besar fungsi ekstensi dapat didukung oleh skrip latar belakang berbasis peristiwa. Hanya dalam keadaan yang jarang sebaiknya ekstensi memiliki latar belakang yang persisten, karena terus menggunakan resource sistem dan dapat menyebabkan ketegangan pada perangkat yang menggunakan daya lebih rendah.

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

Menetapkan persistensi sebagai salah

Temukan kunci "background" dalam file manifest 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 mengandalkan file HTML.

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

Pemroses peristiwa platform

Pemroses harus berada di tingkat teratas untuk mengaktifkan skrip latar belakang jika peristiwa penting dipicu. Pemroses yang terdaftar mungkin perlu diatur ulang ke pola sinkron. Menstrukturkan pemroses, seperti di bawah, tidak akan mengizinkan pemroses 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, biarkan pemroses di tingkat teratas dan tidak bertingkat.

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

Merekam perubahan status dalam penyimpanan

Gunakan storage API untuk menetapkan dan menampilkan status dan nilai. Gunakan local.set untuk melakukan update 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 dihormati 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 alarms API.

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

Kemudian, tambahkan pemroses.

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

Memperbarui 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 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 non-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()
  })
});