Menghentikan penggunaan peristiwa penghapusan muatan

Dipublikasikan: 10 Agustus 2023, Terakhir diperbarui: 14 Juli 2026

Peristiwa unload akan dihentikan secara bertahap dengan mengubah default secara bertahap sehingga pengendali unload berhenti diaktifkan di halaman kecuali jika halaman secara eksplisit memilih untuk mengaktifkannya kembali.

Linimasa penghentian

Kami mencatat bahwa perilaku penghapusan muatan kemungkinan akan mengalami perubahan paling cepat pada Januari 2019, saat kami mengumumkan niat kami untuk menerapkan back/forward cache. Sejalan dengan pekerjaan penerapan, kami melakukan sosialisasi besar yang menghasilkan penurunan signifikan dalam penggunaan penghapusan muatan. Untuk melengkapi sosialisasi ini, kami juga mulai menawarkan cara untuk menguji efek penghentian penghapusan muatan dari Chrome 115:

Sepanjang tahun 2024, kami mengatasi beberapa masalah yang menghalangi dimulainya peluncuran dan sepanjang tahun 2025, kami meluncurkan penghentian penggunaan ke 50 situs teratas:

Milestone Tanggal milestone 50 Situs Teratas % asal lainnya
135 26 Maret 2025 1 (www.google.com) 0
139 30 Juli 2025 5 0
140 27 Agustus 2025 10 0
141 24 September 2025 25 0
142 22 Oktober 2025 50 0
Linimasa penghentian 50 situs teratas.

Pada tahun 2026, kami mulai meluncurkan penghentian penggunaan ini ke semua asal, selama 8 milestone (atau sekitar 32 minggu), seperti yang dijelaskan dalam tabel berikut.

Milestone Tanggal milestone 50 Situs Teratas % pemuatan halaman Chrome untuk semua situs
146 10 Maret 2026 50 1
147 7 April 2026 50 5
148 5 Mei 2026 50 10
149 2 Juni 2026 50 20
150 30 Juni 2026 50 40
151 28 Juli 2026 50 60
152 25 Agustus 2026 50 80
154 22 September 2026 50 100
Linimasa penghentian semua situs.

Peluncuran penuh didasarkan pada pemuatan halaman (dengan konsistensi dari waktu ke waktu), bukan pengguna atau situs individual untuk menghindari dampak yang lebih besar pada pengguna atau situs tertentu seperti yang dijelaskan dalam Niat untuk Menghentikan Penggunaan.

Perhatikan bahwa kami juga menawarkan menu opsi tidak ikut jika linimasa penghentian ini tidak memberikan waktu yang cukup untuk bermigrasi dari penghapusan muatan.

Linimasa penghentian penggunaan fitur pelepasan.
Linimasa penghentian penghapusan muatan.

Latar belakang

unload dirancang untuk diaktifkan saat dokumen dihapus muatannya. Secara teori, peristiwa ini dapat digunakan untuk menjalankan kode kapan saja pengguna keluar dari halaman, atau sebagai callback akhir sesi.

Skenario saat peristiwa ini paling sering digunakan meliputi:

  • Menyimpan data pengguna: Menyimpan data sebelum keluar dari halaman.
  • Melakukan tugas pembersihan: Menutup resource terbuka sebelum meninggalkan halaman.
  • Mengirim data analisis: Mengirim data terkait interaksi pengguna di akhir sesi.

Namun, peristiwa unload sangat tidak dapat diandalkan.

Di Chrome dan Firefox desktop, unload cukup andal, tetapi memiliki dampak negatif pada performa situs dengan mencegah penggunaan bfcache (back/forward cache).

Di browser seluler, unload sering kali tidak berjalan karena tab sering kali berada di latar belakang dan kemudian dihentikan. Oleh karena itu, browser memilih untuk memprioritaskan bfcache di perangkat seluler daripada unload, sehingga membuatnya semakin tidak dapat diandalkan. Safari juga menggunakan perilaku ini di desktop.

Tim Chrome yakin bahwa penggunaan model seluler yang memprioritaskan bfcache daripada unload di desktop akan mengganggu karena membuatnya menjadi lebih tidak dapat diandalkan di sana juga, padahal sebelumnya hal ini cukup andal di Chrome (dan Firefox). Sebaliknya, tujuan Chrome adalah menghapus peristiwa unload sepenuhnya. Hingga saat itu, peristiwa ini akan tetap andal di desktop di Chrome bagi mereka yang secara eksplisit memilih untuk tidak ikut penghentian penggunaan.

Mengapa peristiwa unload dihentikan?

Penghentian penggunaan unload adalah langkah penting dalam pengakuan yang jauh lebih besar terhadap web yang kita gunakan saat ini. Peristiwa unload memberikan kesan kontrol yang salah terhadap siklus proses aplikasi yang semakin tidak sesuai dengan cara kita menjelajahi web di dunia komputasi modern.

Sistem operasi seluler sering kali membekukan atau menghapus muatan halaman web untuk menghemat memori dan browser desktop juga semakin sering melakukannya karena alasan yang sama. Bahkan tanpa intervensi sistem operasi, pengguna sering kali beralih tab dan menutup tab lama tanpa secara formal "meninggalkan halaman".

Menghapus peristiwa unload sebagai peristiwa yang tidak digunakan lagi adalah pengakuan bahwa kita sebagai developer web harus memastikan paradigma kita sesuai dengan dunia nyata dan tidak bergantung pada konsep lama yang tidak lagi berlaku—jika pernah berlaku.

Alternatif untuk peristiwa unload

Sebagai ganti unload, sebaiknya gunakan:

  • visibilitychange: Untuk menentukan kapan visibilitas halaman berubah. Peristiwa ini terjadi saat pengguna beralih tab, meminimalkan jendela browser, atau membuka halaman baru. Pertimbangkan status hidden sebagai waktu terakhir yang andal untuk menyimpan data aplikasi dan pengguna.
  • pagehide: Untuk menentukan kapan pengguna keluar dari halaman. Peristiwa ini terjadi saat pengguna keluar dari halaman, memuat ulang halaman, atau menutup jendela browser. Peristiwa pagehide tidak diaktifkan saat halaman diminimalkan atau dialihkan ke tab lain. Perhatikan bahwa, karena pagehide tidak membuat halaman tidak memenuhi syarat untuk back/forward cache, halaman mungkin dapat dipulihkan setelah peristiwa ini diaktifkan. Jika Anda membersihkan resource apa pun dalam peristiwa ini, resource tersebut mungkin harus dipulihkan saat halaman dipulihkan.

Peristiwa beforeunload memiliki kasus penggunaan yang sedikit berbeda dengan unload karena merupakan peristiwa yang dapat dibatalkan. Peristiwa ini sering digunakan untuk memperingatkan pengguna tentang perubahan yang belum disimpan saat keluar. Peristiwa ini juga tidak dapat diandalkan karena tidak akan diaktifkan jika tab latar belakang dihentikan. Sebaiknya batasi penggunaan beforeunload dan hanya tambahkan secara kondisional. Sebagai gantinya, gunakan peristiwa yang disebutkan sebelumnya untuk sebagian besar penggantian unload.

Untuk mengetahui detail selengkapnya, lihat saran ini tentang tidak pernah menggunakan pengendali unload.

Mendeteksi penggunaan unload

Ada berbagai alat yang dapat membantu Anda menemukan kemunculan peristiwa unload di halaman. Hal ini memungkinkan situs menemukan apakah mereka menggunakan peristiwa ini—baik dalam kode mereka sendiri, atau menggunakan library—dan mungkin terpengaruh oleh penghentian penggunaan yang akan datang.

Chrome DevTools

Chrome DevTools menyertakan audit back-forward-cache untuk membantu Anda mengidentifikasi masalah yang dapat mencegah halaman Anda memenuhi syarat untuk back/forward cache, termasuk penggunaan pengendali unload.

Untuk menguji back/forward cache, ikuti langkah-langkah berikut:

  1. Di halaman Anda, buka DevTools, lalu buka Application > Background services > Back/forward cache.

  2. Klik Test back/forward cache Chrome akan otomatis mengarahkan Anda ke chrome://terms/ dan kembali ke halaman Anda. Atau, Anda dapat mengklik tombol kembali dan maju browser.

Jika halaman Anda tidak memenuhi syarat untuk back/forward cache, tab Back/forward cache akan menampilkan daftar masalah. Di bagian Actionable, Anda dapat melihat apakah Anda menggunakan unload:

Alat pengujian Back/forward cache Chrome DevTools yang menunjukkan bahwa handler pelepasan digunakan
Alat pengujian Back/forward cache Chrome DevTools.

Reporting API

Reporting API dapat digunakan bersama dengan Kebijakan Izin hanya baca untuk mendeteksi penggunaan unload dari pengguna situs Anda.

Untuk mengetahui detail selengkapnya, lihat Menggunakan Reporting API untuk menemukan penghapusan muatan

Bfcache notRestoredReasons API

Properti notRestoredReasons—yang ditambahkan ke class PerformanceNavigationTiming—melaporkan informasi tentang apakah dokumen diblokir untuk menggunakan bfcache pada navigasi, dan alasannya. Berikut adalah contoh tampilan objek respons yang memperingatkan tentang pemroses unload yang ada:

{
   children: [],
   id: null,
   name: null,
   reasons: [
     {"reason", "unload-listener"}
   ],
   src: null,
   url: "https://www.example.com/page/"
}

Mengontrol akses ke unload

Chrome menghentikan penggunaan peristiwa unload secara bertahap. Sementara itu, Anda dapat menggunakan berbagai alat untuk mengontrol perilaku ini dan bersiap menghadapi penghentian penggunaan yang akan datang. Perlu diingat bahwa Anda tidak boleh mengandalkan teknik ini dalam jangka panjang, dan Anda harus berencana untuk bermigrasi ke alternatif sesegera mungkin.

Opsi berikut memungkinkan Anda mengaktifkan atau menonaktifkan pengendali unload untuk menguji cara kerja situs Anda tanpa pengendali tersebut sehingga Anda dapat bersiap menghadapi penghentian penggunaan yang akan datang. Ada berbagai jenis kebijakan:

  • Kebijakan Izin: Kebijakan ini adalah API platform untuk pemilik situs mengontrol akses ke fitur, di tingkat situs atau halaman individual, menggunakan header HTTP.
  • Kebijakan perusahaan: Alat untuk admin IT mengonfigurasi Chrome bagi organisasi atau bisnis mereka. Kebijakan ini dapat dikonfigurasi menggunakan panel administrator, seperti Konsol Google Admin.
  • Tanda Chrome: Hal ini memungkinkan developer individual mengubah setelan penghentian penggunaan unload untuk menguji dampaknya pada berbagai situs.

Kebijakan Izin

Kebijakan Izin ditambahkan dari Chrome 115 untuk memungkinkan situs memilih tidak menggunakan unload pengendali dan segera mendapatkan manfaat dari bfcache untuk meningkatkan performa situs. Lihat contoh ini tentang cara menyetelnya untuk situs Anda. Hal ini memungkinkan situs mengantisipasi penghentian penggunaan unload.

Kebijakan ini diperluas di Chrome 117 untuk memungkinkan situs melakukan hal sebaliknya, dan memilih untuk terus mencoba mengaktifkan unload seperti yang mereka lakukan sekarang, karena Chrome mengubah default untuk tidak mengaktifkan pengendali ini di masa mendatang. Lihat contoh ini tentang cara terus mengizinkan pengendali penghapusan muatan diaktifkan untuk situs Anda. Meskipun kami mendorong pemilik situs untuk berhenti menggunakan pengendali unload karena ketidakandalannya, kami berencana untuk mendukung opsi tidak ikut ini dalam waktu yang cukup lama untuk situs yang perlu menggunakannya. Perhatikan bahwa memilih untuk ikut kembali tidak membuat pengendali unload menjadi lebih andal di perangkat seluler—hal ini hanya memulihkan status quo saat ini.

Kebijakan perusahaan

Perusahaan yang memiliki software yang bergantung pada peristiwa unload agar berfungsi dengan benar dapat menggunakan kebijakan ForcePermissionPolicyUnloadDefaultEnabled untuk mencegah penghentian penggunaan bertahap untuk perangkat yang berada di bawah kontrol mereka. Dengan mengaktifkan kebijakan ini, unload akan terus ditetapkan secara default ke aktif untuk semua asal. Halaman mungkin masih dapat menetapkan kebijakan yang lebih ketat jika diinginkan. Seperti opsi tidak ikut Kebijakan Izin, kebijakan ini adalah alat untuk mengurangi potensi perubahan yang dapat menyebabkan gangguan. Sekali lagi, kami mendorong pemilik situs untuk berhenti bergantung pada pengendali unload, tetapi Chrome berencana untuk mendukung opsi tidak ikut perusahaan ini dalam waktu yang cukup lama untuk situs yang perlu menggunakannya.

Tanda Chrome dan switch command line

Selain kebijakan perusahaan, Anda dapat menonaktifkan penghentian penggunaan untuk pengguna individual menggunakan tanda Chrome dan switch command line:

Menetapkan chrome://flags/#deprecate-unload ke enabled akan memajukan default penghentian penggunaan dan mencegah pengendali unload diaktifkan. Pengendali ini masih dapat diganti berdasarkan situs menggunakan Kebijakan Izin, tetapi akan terus diaktifkan secara default.

Setelan ini juga dapat dikontrol oleh switch command line.

Perbandingan opsi

Tabel berikut merangkum berbagai penggunaan opsi yang dibahas sebelumnya:

Memajukan penghentian penggunaan Memajukan penghentian penggunaan (dengan pengecualian) Mencegah penghentian penggunaan untuk mengamankan waktu migrasi
Kebijakan Izin
(berlaku untuk halaman/situs)
Ya Ya Ya
Kebijakan perusahaan
(berlaku untuk perangkat)
Tidak Tidak Ya
Tanda Chrome
(berlaku untuk pengguna individual)
Ya Tidak Tidak
Switch command line Chrome
(berlaku untuk pengguna individual)
Ya Tidak Ya

Kesimpulan

Pengendali unload tidak digunakan lagi. Pengendali ini sudah lama tidak dapat diandalkan dan tidak dijamin akan diaktifkan dalam semua kasus saat dokumen dihancurkan. Selain itu, unload pengendali tidak kompatibel dengan bfcache.

Situs yang menggunakan pengendali unload harus bersiap menghadapi penghentian penggunaan yang akan datang ini dengan menguji pengendali unload yang ada, menghapus atau memigrasikannya, atau, sebagai upaya terakhir, menunda penghentian penggunaan jika memerlukan lebih banyak waktu.

Ucapan terima kasih

Terima kasih kepada Kenji Baheux, Fergal Daly, Adriana Jara, dan Jeremy Wagner atas masukan ulasan yang bermanfaat.

Gambar utama oleh Anja Bauermann di Unsplash