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. Uzantılar, sistem kaynaklarını sürekli olarak tükettiği ve daha düşük güçteki cihazlarda zorlanmaya neden olabileceği için yalnızca nadir durumlarda kalıcı bir arka plana sahip olmalıdır.
Kalıcı bir arka plan komut dosyasını etkinliğe dayalı kalıcı olmayan bir modele taşıyarak uzantının performansını artırın. Varsayılan olarak "persistent" değeri true olarak ayarlanır.
Kalıcılığı yanlış olarak belirleme
Uzantı manifest dosyasında "background" anahtarını bulun, ardından "persistent" alanını false olarak ekleyin veya güncelleyin.
{
"name": "My extension",
...
"background": {
"scripts": ["background.js"],
"persistent": false
},
...
}
Aynı durum, bir HTML dosyasına dayanan arka plan komut dosyaları için de geçerlidir.
{
"name": "My extension",
...
"background": {
"page": "background.html",
"persistent": false
},
...
}
Yüzey etkinlik işleyicileri
Önemli bir etkinlik tetiklenirse arka plan komut dosyasının etkinleştirilmesi için dinleyicilerin en üst düzeyde olması gerekir. Kayıtlı dinleyicilerin, eşzamanlı bir düzene göre yeniden yapılandırılması gerekebilir. Aşağıdaki gibi yapılandırılan dinleyiciler, eşzamanlı olarak kaydedilmedikleri için çağrılamaz.
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ştirilmemiş şekilde tutun.
chrome.runtime.onStartup.addListener(function() {
// run startup function
})
Depolama alanındaki durum değişikliklerini kaydetme
Durumları ve değerleri ayarlamak ve döndürmek için storage API'yi kullanın. Yerel makinede güncelleme yapmak için local.set aracını kullanın.
chrome.storage.local.set({ variable: variableInformation });
Bu değişkenin değerini almak için local.get kullanın.
chrome.storage.local.get(['variable'], function(result) {
let awesomeVariable = result.variable;
// Do something with awesomeVariable
});
Zamanlayıcıları alarma dönüştürme
Etkinlik sayfası etkin olmadığında tetiklenirlerse window.setTimeout() veya window.setInterval() gibi DOM tabanlı zamanlayıcılar, 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'yi kullanın.
chrome.alarms.create({delayInMinutes: 3.0})
Ardından bir dinleyici ekleyin.
chrome.alarms.onAlarm.addListener(function() {
alert("Hello, world!")
});
Arka plan komut dosyası işlevleri için güncelleme çağrıları
Arka plan sayfasından bir işlevi çağırmak için extension.getBackgroundPage kullanıyorsanız runtime.getBackgroundPage olarak güncelleyin. Daha yeni olan 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();
});
Bu yöntem, arka plan komut dosyası etkin değilse çalışmaz. Bu, kalıcı olmayan bir komut dosyasının varsayılan durumudur. Daha yeni olan yöntemde, arka plan komut dosyasının yüklendiğinden emin olmak için bir geri çağırma işlevi bulunur.
document.getElementById('target').addEventListener('click', function() {
chrome.runtime.getBackgroundPage(function(backgroundPage){
backgroundPage.backgroundFunction()
})
});