Kalıcı olmayan arka plan komut dosyaları uygulamak, uzantınızın kaynak maliyetini büyük ölçüde azaltır. Çoğu uzantı işlevi, etkinlik tabanlı bir arka plan komut dosyası tarafından desteklenebilir. Uzantılar sürekli olarak sistem kaynaklarını tükettiği ve düşük güçlü cihazlarda aksaklıklara neden olabileceği için yalnızca nadir durumlarda kalıcı arka plana sahip olmalıdır.
Kalıcı bir arka plan komut dosyasını olay tabanlı, kalıcı olmayan bir modele taşıyarak uzantının performansını artırın. "persistent"
varsayılan olarak true olarak ayarlanır.
Kalıcılığı yanlış olarak tanımlama
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, HTML dosyasına dayalı arka plan komut dosyaları için de geçerlidir.
{
"name": "My extension",
...
"background": {
"page": "background.html",
"persistent": false
},
...
}
Etkinlik işleyicileri gösterin
Önemli bir etkinlik tetiklenirse dinleyicilerin arka plan komut dosyasını etkinleştirmek için üst düzeyde olması gerekir. Kayıtlı dinleyicilerin senkronize bir kalıba göre yeniden yapılandırılması gerekebilir. İşleyicileri aşağıdaki gibi yapılandırmak, 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ştirilmemiş halde 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
'ü kullanın.
chrome.storage.local.set({ variable: variableInformation });
Söz konusu değişkenin değerini almak için local.get
değerini kullanın.
chrome.storage.local.get(['variable'], function(result) {
let awesomeVariable = result.variable;
// Do something with awesomeVariable
});
Zamanlayıcıları alarmlara dönüştürme
window.setTimeout()
veya window.setInterval()
gibi DOM tabanlı zamanlayıcılar, etkinlik sayfası etkin değilken 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'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 çağrıları güncelleme
Arka plan sayfasından bir işlevi çağırmak için extension.getBackgroundPage
kullanıyorsanız 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üklenmesini sağlamak için bir geri çağırma işlevi içerir.
document.getElementById('target').addEventListener('click', function() {
chrome.runtime.getBackgroundPage(function(backgroundPage){
backgroundPage.backgroundFunction()
})
});