Tab latar belakang dapat memberikan dampak negatif yang signifikan pada kinerja browser, terutama terkait masa pakai baterai. Untuk mengurangi hal ini, Chrome telah menempatkan berbagai pembatasan pada tab latar belakang selama beberapa tahun terakhir. Baru-baru ini telah dilakukan sejumlah upaya untuk melakukan perbaikan lebih lanjut, dan dokumen ini memberikan ringkasan kebijakan Chrome. Dokumen ini berfokus untuk menjelaskan kebijakan saat ini di Chrome 57. Strategi jangka panjang dan rencana lebih lanjut dapat ditemukan di dokumen ini.
Mengoptimalkan aplikasi untuk latar belakang
Developer web harus menyadari bahwa pengguna sering kali membuka banyak tab di latar belakang dan hal ini dapat berdampak serius pada penggunaan daya dan masa pakai baterai. Pekerjaan di latar belakang harus diminimalkan kecuali jika benar-benar diperlukan untuk memberikan pengalaman pengguna tertentu. Page visibility API harus digunakan untuk mendeteksi kapan halaman berada di latar belakang dan menangguhkan semua pekerjaan yang tidak perlu seperti update visual.
Untuk beberapa situs, pengoptimalan sederhana ini dapat mengurangi penggunaan CPU hingga 75%:
var doVisualUpdates = true;
document.addEventListener('visibilitychange', function(){
doVisualUpdates = !document.hidden;
});
function update() {
if (!doVisualUpdates) {
return;
}
doStuff();
}
Kebijakan
requestAnimationFrame()
Sesuai dengan dokumentasi,
Chrome tidak memanggil requestAnimationFrame()
saat halaman berada di latar belakang.
Perilaku ini telah diterapkan sejak tahun 2011.
Penyelarasan timer latar belakang
Sejak Chrome 11, setiap timer independen dijalankan tidak lebih dari sekali per detik. Chrome menjalankan timer ini dalam batch sekali per detik, sehingga memastikan jumlah proses yang diaktifkan diminimalkan. Halaman yang memutar audio yang dapat didengar dianggap terlihat oleh pengguna dan dikecualikan dari throttling timer latar belakang. Pengecualian berlangsung selama beberapa detik setelah audio berhenti diputar untuk memungkinkan aplikasi untuk mengantrekan trek audio berikutnya.
Perhatikan bahwa audio dianggap terdengar saat dan hanya saat Chrome menampilkan ikon audio. Streaming audio tanpa suara tidak memberikan pengecualian.
Throttling timer latar belakang berbasis anggaran
Pengiriman di Chrome 57, throttling timer berbasis anggaran adalah perpanjangan lebih lanjut dari mekanisme penyelarasan timer, menetapkan batas tambahan pada penggunaan CPU timer latar belakang. Solusi ini beroperasi sebagai berikut:
- Setiap tab latar belakang memiliki anggaran waktu (dalam detik) untuk menjalankan timer di latar belakang.
- Halaman akan dikenai batasan anggaran waktu setelah 10 detik di latar belakang.
- Tugas timer boleh berjalan hanya jika anggaran waktunya tidak negatif.
- Setelah timer dieksekusi, waktu eksekusinya akan dikurangi dari anggaran.
- Anggaran terus berubah seiring waktu (saat ini ditetapkan ke 0,01 detik per detik). Perhatikan bahwa tingkat perubahan anggaran ini dapat disesuaikan sebagai Chrome mengumpulkan lebih banyak data tentang perilaku throttling.
Ada sejumlah pengecualian otomatis dari throttling ini:
- Aplikasi yang memutar audio dianggap sebagai latar depan dan tidak dibatasi.
- Aplikasi dengan koneksi real-time (WebSockets dan WebRTC), untuk menghindari penutupan koneksi ini dengan waktu tunggu. Aturan run-timer-sekali- detik masih tetap diterapkan dalam kasus ini.
Perhatikan bahwa mekanisme ini menggunakan waktu dinding, bukan waktu CPU. Ini adalah perkiraan waktu CPU yang baik dan hukuman yang memblokir thread utama untuk lama.
Terakhir, ingat bahwa jika Anda menggunakan tugas yang lama di latar belakang, aplikasi Anda
dapat dibatasi selama jangka waktu yang sangat lama (hingga 100 kali durasi tugas Anda).
Bagi pekerjaan Anda menjadi beberapa bagian dengan durasi 50 md atau kurang untuk
panduan performa
dan menggunakan pemroses visibilityChange
untuk menghindari pekerjaan yang tidak perlu di latar belakang.
Ketidakikutsertaan
Chrome menyediakan tanda --disable-background-timer-throttling
untuk kasus penggunaan seperti
menjalankan rangkaian tes dan
komputasi berat lainnya yang disetujui pengguna.