Tab latar belakang dapat berdampak negatif secara drastis pada performa browser, terutama pada masa pakai baterai. Untuk mengurangi hal ini, Chrome telah menerapkan berbagai batasan pada tab latar belakang selama beberapa tahun terakhir. Baru-baru ini, ada sejumlah upaya untuk melakukan peningkatan lebih lanjut, dan dokumen ini memberikan ringkasan kebijakan Chrome. Dokumen ini berfokus pada penjelasan 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 diperlukan, seperti pembaruan 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 agar aplikasi dapat mengantrekan trek audio berikutnya.
Perhatikan bahwa audio dianggap terdengar saat dan hanya saat Chrome menampilkan ikon audio. Streaming audio senyap tidak memberikan pengecualian.
Throttling timer latar belakang berbasis anggaran
Dikirimkan di Chrome 57, throttling timer berbasis anggaran adalah ekstensi lebih lanjut dari mekanisme perataan timer, yang menempatkan batas tambahan pada penggunaan CPU timer latar belakang. Cara kerjanya sebagai berikut:
- Setiap tab latar belakang memiliki anggaran waktu (dalam detik) untuk menjalankan timer di latar belakang.
- Halaman dikenai batasan anggaran waktu setelah 10 detik di latar belakang.
- Tugas timer hanya diizinkan untuk berjalan jika anggaran waktu non-negatif.
- Setelah timer dieksekusi, waktu pengoperasiannya dikurangi dari anggaran.
- Anggaran terus-menerus dibuat ulang seiring waktu (saat ini ditetapkan ke kecepatan 0,01 detik per detik). Perhatikan bahwa tingkat perubahan anggaran ini dapat disesuaikan saat 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 sebelum waktu tunggu. Aturan run-timers-once-a-second masih diterapkan dalam kasus ini.
Perhatikan bahwa mekanisme ini menggunakan waktu dinding, bukan waktu CPU. Ini adalah perkiraan waktu CPU yang baik dan dapat memblokir thread utama dalam waktu yang lama.
Terakhir, ingat bahwa jika Anda menggunakan tugas yang panjang di latar belakang, aplikasi Anda dapat di-throttle untuk jangka waktu yang sangat lama (hingga 100 kali durasi tugas).
Bagi pekerjaan Anda menjadi beberapa bagian berdurasi 50 md atau kurang per
pedoman performa
dan gunakan pemroses visibilityChange
untuk menghindari melakukan pekerjaan yang tidak perlu di latar belakang.
Pilihan tidak ikut
Chrome menyediakan tanda --disable-background-timer-throttling
untuk kasus penggunaan seperti
menjalankan suite pengujian dan komputasi berat lainnya yang diizinkan pengguna.