Etkinliğe dayalı arka plan komut dosyalarına geçiş

Kalıcı olmayan arka plan komut dosyalarını uygulamak, uzantınızın kaynak maliyetini büyük ölçüde azaltır. Çoğu uzantı işlevi, etkinliğe dayalı bir arka plan komut dosyası tarafından desteklenebilir. Sürekli olarak sistem kaynaklarını tüketen ve düşük güç tüketen cihazlarda zorlanmaya neden olabileceğinden, yalnızca nadir durumlarda uzantıların kalıcı bir arka planı olmalıdır.

Kalıcı arka plan komut dosyasını, etkinliğe dayalı kalıcı olmayan bir modele taşıyarak uzantının performansını artırın. "persistent" varsayılan olarak doğru değerine ayarlıdır.

Kalıcılığı false olarak tanımlama

Uzantı manifest dosyasında "background" anahtarını bulun, ardından "persistent" alanını false (yanlış) değerine ekleyin veya güncelleyin.

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

Aynı durum HTML dosyasını temel alan arka plan komut dosyaları için de geçerlidir.

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

Yüzey etkinliği işleyiciler

İşleyiciler, önemli bir etkinlik tetiklenirse arka plan komut dosyasını etkinleştirmek için en üst düzeyde olmalıdır. Kayıtlı dinleyicilerin eşzamanlı bir düzende yeniden yapılandırılması gerekebilir. Aşağıdaki gibi yapılandırılan dinleyiciler, eşzamanlı olarak kaydedilmedikleri için çağrılmalarına izin vermez.

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

Bunun yerine, dinleyicileri üst düzeyde ve iç içe yerleştirilmiş halde tutun.

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

Depolama alanındaki kayıt durumu değişiklikleri

Durumları ve değerleri ayarlayıp döndürmek için storage API'yi kullanın. Yerel makinede güncelleme yapmak için local.set kullanın.

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

Söz konusu değişkenin değerini almak için local.get işlevini kullanın.

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

Zamanlayıcıları alarmlara dönüştürün

window.setTimeout() veya window.setInterval() gibi DOM tabanlı zamanlayıcılar, etkinlik sayfası etkin olmadığında tetiklenirse kalıcı olmayan arka plan komut dosyalarında dikkate alınmaz.

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

Bunun yerine alarms API'sini kullanın.

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

Daha sonra, bir dinleyici ekleyin.

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

Arka plan komut dosyası işlevleri için çağrıları güncelleme

Arka plan sayfasından bir işlev çağırmak için extension.getBackgroundPage kullanıyorsanız aracı runtime.getBackgroundPage olarak güncelleyin. Yeni yöntem, kalıcı olmayan komut dosyasını döndürmeden önce etkinleştirir.

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

Arka plan komut dosyası etkin değilse bu yöntem çalışmaz. Bu, kalıcı olmayan bir komut dosyası için varsayılan durumdur. Yeni yöntem, arka plan komut dosyasının yüklendiğinden emin olmak için bir geri çağırma işlevi içerir.

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