Menghentikan penggunaan peristiwa penghapusan muatan

Peristiwa unload akan dihentikan secara bertahap dengan mengubah setelan 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 awal pada Januari 2019, saat kami mengumumkan niat untuk menerapkan cache kembali/maju. Sejalan dengan pekerjaan penerapan, kami melakukan penjangkauan yang luas yang menghasilkan penurunan penggunaan penghapusan muatan yang signifikan. Untuk melengkapi penjangkauan ini, kami juga mulai menawarkan cara untuk menguji efek penghentian penggunaan penghapusan muatan dari Chrome 115:

Setelah fase penjangkauan dan uji coba ini, berikut adalah perkiraan peluncuran penghentian sementara:

  • Fase cakupan tempat penghapusan muatan akan berhenti berfungsi secara bertahap untuk 50 situs populer teratas (referensi pada saat penulisan).
    • Mulai dengan 1% pengguna dari Chrome 120 (akhir November 2023).
    • Berakhir dengan 100% pengguna pada akhir Kuartal 3 2024
  • Selain itu, mulai K3 2024, kami bermaksud memulai fase umum saat penghapusan muatan akan berhenti berfungsi secara bertahap di situs mana pun, dimulai dengan 1% pengguna dan berakhir dengan 100% pengguna pada akhir K1 2025.

Perhatikan bahwa kami juga menawarkan menu opsi tidak ikut jika linimasa penghentian sementara ini tidak memberikan waktu yang cukup untuk bermigrasi dari penghapusan muatan. Tujuan kami adalah menggunakan penghentian sementara ini untuk menginformasikan linimasa fase terakhir (penghentian total penghapusan muatan) saat penghentian ini akan dihapus atau dikurangi.

Linimasa penghentian penggunaan proses penghapusan muatan.

Latar belakang

unload dirancang untuk diaktifkan saat dokumen di-unload. Secara teori, kode ini dapat digunakan untuk menjalankan kode setiap kali pengguna keluar dari halaman, atau sebagai callback akhir sesi.

Skenario tempat peristiwa ini paling sering digunakan meliputi:

  • Menyimpan data pengguna: Menyimpan data sebelum keluar dari halaman.
  • Melakukan tugas pembersihan: Menutup resource yang terbuka sebelum meninggalkan halaman.
  • Mengirim analisis: Mengirim data yang terkait dengan 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 (cache kembali/maju).

Di browser seluler, unload sering kali tidak berjalan karena tab sering kali di latar belakang, lalu 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 menggunakan model seluler yang memprioritaskan bfcache daripada unload di desktop akan mengganggu dengan membuatnya lebih tidak dapat diandalkan di sana, padahal sebelumnya hal ini cukup andal di Chrome (dan Firefox). Sebagai gantinya, tujuan Chrome adalah menghapus peristiwa unload sepenuhnya. Hingga saat itu, fitur ini akan tetap dapat diandalkan di desktop bagi pengguna yang secara eksplisit memilih untuk tidak menggunakan fitur tersebut.

Mengapa penghentian penggunaan peristiwa unload?

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

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

Menghapus peristiwa unload karena sudah tidak digunakan lagi adalah pengakuan bahwa kita sebagai developer web perlu memastikan paradigma kita cocok dengan dunia nyata dan tidak bergantung pada konsep usang yang tidak lagi berlaku—jika pernah berlaku.

Alternatif untuk peristiwa unload

Sebaiknya gunakan unload, bukan:

  • visibilitychange: Untuk menentukan kapan visibilitas halaman berubah. Peristiwa ini terjadi saat pengguna beralih tab, menciutkan 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 hanya diperkecil atau dialihkan ke tab lain. Perhatikan bahwa, karena pagehide tidak membuat halaman tidak memenuhi syarat untuk cache kembali/maju, halaman dapat dipulihkan setelah peristiwa ini diaktifkan. Jika Anda membersihkan resource 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. Pesan ini sering digunakan untuk memperingatkan pengguna tentang perubahan yang belum disimpan saat keluar dari halaman. 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 di atas untuk sebagian besar penggantian unload.

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

Mendeteksi penggunaan unload

Ada berbagai alat untuk membantu Anda menemukan kemunculan peristiwa unload di halaman. Hal ini memungkinkan situs untuk mengetahui apakah mereka menggunakan peristiwa ini—baik dalam kode mereka sendiri, atau melalui library—sehingga dapat terpengaruh oleh penghentian mendatang.

Chrome DevTools

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

Untuk menguji cache kembali/maju, ikuti langkah-langkah berikut:

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

  2. Klik Uji cache kembali/maju 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 penyimpanan dalam cache kembali/maju, tab Back/forward cache akan menampilkan daftar masalah. Di bagian Dapat ditindaklanjuti, Anda dapat melihat apakah Anda menggunakan unload:

Alat pengujian cache Kembali/maju Chrome DevTools yang menunjukkan pengendali penghapusan muatan telah digunakan

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—ditambahkan ke class PerformanceNavigationTiming—melaporkan informasi tentang apakah dokumen diblokir agar tidak menggunakan bfcache pada navigasi, dan alasannya. Petunjuk penggunaan dapat ditemukan di sini. Berikut adalah contoh tampilan peringatan objek respons pemroses unload yang ada:

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

Mengontrol akses ke unload

Chrome akan menghentikan penggunaan peristiwa unload secara bertahap. Sementara itu, Anda dapat menggunakan berbagai alat untuk mengontrol perilaku ini dan bersiap menghadapi penghentian mendatang. 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 tanpa pengendali tersebut sehingga Anda dapat bersiap menghadapi penghentian mendatang. Ada berbagai jenis kebijakan:

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

Kebijakan Izin

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

Hal ini akan diperluas di Chrome 117 untuk memungkinkan situs melakukan hal sebaliknya, dan memilih untuk terus mencoba mengaktifkan pengendali unload, karena Chrome mengubah setelan default agar tidak diaktifkan di masa mendatang. Lihat contoh ini tentang cara terus mengizinkan pengendali penghapusan muatan diaktifkan untuk situs Anda. Keikutsertaan ini tidak akan berlaku selamanya dan harus digunakan untuk memberi waktu bagi situs untuk bermigrasi dari pengendali unload.

Kebijakan perusahaan

Perusahaan yang memiliki software yang bergantung pada peristiwa unload agar berfungsi dengan benar dapat menggunakan kebijakan ForcePermissionPolicyUnloadDefaultEnabled untuk mencegah penghentian bertahap untuk perangkat yang berada di bawah kendali mereka. Dengan mengaktifkan kebijakan ini, unload akan terus diaktifkan secara default untuk semua origin. Halaman masih dapat menetapkan kebijakan yang lebih ketat jika diinginkan. Seperti pilihan tidak ikut Kebijakan Izin, ini adalah alat untuk memitigasi potensi perubahan yang dapat menyebabkan kerusakan, tetapi tidak boleh digunakan tanpa batas waktu.

Flag Chrome dan tombol command line

Selain kebijakan perusahaan, Anda dapat menonaktifkan penghentian penggunaan untuk setiap pengguna melalui flag Chrome dan tombol command line:

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

Setelan ini juga dapat dikontrol oleh tombol command line.

Perbandingan opsi

Tabel berikut merangkum berbagai penggunaan opsi yang telah dibahas sebelumnya:

Memajukan penghentian Memajukan penghentian (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 setiap pengguna)
Ya Tidak Tidak
Tombol command line Chrome
(berlaku untuk setiap pengguna)
Ya Tidak Ya

Kesimpulan

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

Situs yang saat ini menggunakan pengendali unload harus bersiap menghadapi penghentian mendatang ini dengan menguji pengendali unload yang ada, menghapus atau memigrasikannya, atau, sebagai upaya terakhir, menunda penghentian jika diperlukan lebih banyak waktu.

Ucapan terima kasih

Terima kasih kepada Kenji Baheux, Fergal Daly, Adriana Jara, dan Jeremy Wagner atas bantuannya dalam meninjau artikel ini.

Banner besar oleh Anja Bauermann di Unsplash