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