Chrome 57'de arka plan sekmeleri

Arka plan sekmelerinin, özellikle pil ömrü üzerinde, tarayıcı performansı üzerinde çok olumsuz bir etkisi olabilir. Chrome, bu hataların etkisini azaltmak için son birkaç yıldır arka plandaki sekmelere çeşitli kısıtlamalar uyguluyor. Son zamanlarda daha fazla iyileştirme yapmak için çeşitli çalışmalar yürütülmüştür ve bu belgede Chrome politikasına genel bir bakış sunulmaktadır. Bu doküman, Chrome 57'deki mevcut politikaları açıklamaya odaklanmaktadır. Uzun vadeli stratejiyi ve yeni planları bu belgede bulabilirsiniz.

Bir uygulamayı arka plan için optimize etme

Web geliştiricileri, kullanıcıların genellikle arka planda çok sayıda sekme açık olduğunun ve bunun güç kullanımı ile pil ömrünü ciddi ölçüde etkileyebileceğinin farkında olmalıdır. Belirli bir kullanıcı deneyimi sağlamak için kesinlikle gerekli olmadığı sürece arka planda çalışma minimum düzeyde tutulmalıdır. Sayfa görünürlüğü API'si, sayfanın ne zaman arka plana alındığını algılamak ve görsel güncellemeler gibi gereksiz tüm işleri askıya almak için kullanılmalıdır.

Bu basit optimizasyon, bazı sitelerde CPU kullanımını %75'e varan oranlarda azaltabilir:

var doVisualUpdates = true;

document.addEventListener('visibilitychange', function(){
    doVisualUpdates = !document.hidden;
});

function update() {
    if (!doVisualUpdates) {
    return;
    }
    doStuff();
}

Politikalar

requestAnimationFrame()

Dokümanlara göre Chrome, bir sayfa arka plandayken requestAnimationFrame() özelliğini çağırmaz. Bu davranış, 2011 yılından beri kullanılmaktadır.

Arka plan zamanlayıcı hizalaması

Chrome 11 sürümünden itibaren her bağımsız zamanlayıcı saniyede en fazla bir kez çalıştırılır. Chrome, bu zamanlayıcıları saniyede bir grup halinde çalıştırarak işlem uyandırma sayısının minimumda tutulmasını sağlar. Sesli ses çalan sayfalar kullanıcılar tarafından görülebilen sayfalar olarak kabul edilir ve arka plan zamanlayıcı kısıtlamasından muaftır. Muafiyet, sesin çalınması durduktan sonra uygulamaların bir sonraki ses parçasını sıraya almasına izin vermek için birkaç saniye sürer.

Sesin, yalnızca Chrome'da ses simgesi gösterildiğinde sesli olarak kabul edildiğini unutmayın. Sessiz ses akışları ise muafiyet sağlamaz.

Bütçeye dayalı arka plan zamanlayıcısını kısıtlama

Chrome 57 sürümünde sunulan bütçeye dayalı zamanlayıcı kısıtlama, zamanlayıcı hizalama mekanizmasının ek bir uzantısıdır ve arka plan zamanlayıcının CPU kullanımına ek bir sınır getirir. İşleyiş şekli şöyledir:

  • Her arka plan sekmesinin, zamanlayıcıları arka planda çalıştırmak için bir zaman bütçesi (saniye cinsinden) vardır.
  • Bir sayfa, arka planda 10 saniye geçtikten sonra zaman bütçesi sınırlamalarına tabi olur.
  • Bir zamanlayıcı görevi, yalnızca zaman bütçesi negatif olmadığında çalıştırılmasına izin verilir.
  • Zamanlayıcı çalıştırıldıktan sonra, çalışma süresi bütçeden çıkarılır.
  • Bütçe zaman içinde sürekli olarak yeniden oluşturulur (şu anda saniyede 0,01 saniye hızına ayarlanmıştır). Chrome kısıtlama davranışı hakkında daha fazla veri topladıkça bu bütçe yeniden oluşturma hızının değiştirilebileceğini unutmayın.

Bu kısıtlamadan çeşitli otomatik muafiyetler vardır:

  • Ses çalan uygulamalar ön plan olarak kabul edilir ve kısıtlanmaz.
  • Bu bağlantıların zaman aşımıyla kapatılmasını önlemek için gerçek zamanlı bağlantılara (WebSockets ve WebRTC) sahip uygulamalar. Bu durumlarda "saniyede bir kez çalıştırma" kuralı hâlâ uygulanır.

Bu mekanizmanın CPU süresini değil, gerçek zamanı kullandığını unutmayın. Bu, CPU süresini iyi bir şekilde gösterir ve ana iş parçacığını uzun süre engelleyen cezalar içerir.

Son olarak, arka planda uzun görevler kullanıyorsanız uygulamanızın çok uzun bir süre (görevinizin süresinin 100 katına kadar) kısıtlanabileceğini unutmayın. Çalışmanızı performans yönergelerine göre 50 ms veya daha kısa süreli parçalara bölün ve arka planda gereksiz işler yapmaktan kaçınmak için visibilityChange işleyicisini kullanın.

Devre dışı bırakma

Chrome, test paketlerini ve kullanıcı destekli diğer ağır hesaplamaları çalıştırma gibi kullanım alanlarında --disable-background-timer-throttling işaretini sağlar.