Tab latar belakang di Chrome 57

Tab latar belakang dapat memberikan efek yang sangat negatif terhadap performa browser, terutama pada masa pakai baterai. Untuk mengurangi hal ini, Chrome telah menerapkan berbagai pembatasan 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 dalam 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 terhadap penggunaan daya dan masa pakai baterai. Pekerjaan di latar belakang harus diminimalkan kecuali jika benar-benar diperlukan untuk memberikan pengalaman pengguna tertentu. Page visibilitas 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()

Berdasarkan dokumentasi, Chrome tidak memanggil requestAnimationFrame() saat halaman berada di latar belakang. Perilaku ini telah terjadi sejak 2011.

Perataan timer latar belakang

Mulai Chrome 11, setiap timer independen dijalankan tidak lebih dari sekali per detik. Chrome menjalankan timer ini dalam batch sekali per detik, yang memastikan jumlah bangun proses diminimalkan. Halaman yang memutar audio yang dapat didengar dianggap dapat dilihat 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 dapat didengar jika dan hanya jika 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 merupakan ekstensi lebih lanjut dari mekanisme penyelarasan timer, yang memberikan batas tambahan pada penggunaan CPU timer latar belakang. Fungsi ini beroperasi sebagai berikut:

  • Setiap tab latar belakang memiliki anggaran waktu (dalam detik) untuk menjalankan timer di latar belakang.
  • Halaman dikenai pembatasan anggaran waktu setelah 10 detik di latar belakang.
  • Tugas timer hanya boleh berjalan jika anggaran waktu tidak negatif.
  • Setelah timer dieksekusi, waktu berjalannya akan dikurangi dari anggaran.
  • Anggaran terus-menerus diperbarui seiring waktu (saat ini ditetapkan ke rasio 0,01 detik per detik). Perhatikan bahwa rasio pembuatan ulang anggaran ini dapat disesuaikan karena Chrome mengumpulkan lebih banyak data tentang perilaku throttling.

Ada sejumlah pengecualian otomatis dari throttling ini:

  • Aplikasi yang memutar audio dianggap berjalan di latar depan dan tidak di-throttle.
  • Aplikasi dengan koneksi real-time (WebSockets dan WebRTC), untuk menghindari penutupan koneksi ini selama waktu tunggu. Aturan run-timer-sekali-satu-detik masih diterapkan dalam kasus ini.

Ingat bahwa mekanisme ini menggunakan {i> wall time<i}, bukan waktu CPU. Ini merupakan perkiraan yang baik untuk waktu CPU dan menghukum pemblokiran thread utama untuk waktu yang lama.

Terakhir, ingat bahwa jika Anda menggunakan tugas 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 dengan durasi 50 md atau kurang sesuai pedoman performa dan gunakan pemroses visibilityChange untuk menghindari pekerjaan yang tidak perlu di latar belakang.

Pilihan tidak ikut

Chrome menyediakan flag --disable-background-timer-throttling untuk kasus penggunaan seperti menjalankan rangkaian pengujian dan komputasi berat lainnya yang disetujui pengguna.