Mengaktifkan bfcache untuk Cache-Control: no-store

Dipublikasikan: 21 Oktober 2024, Terakhir diperbarui: 9 September 2025

Chrome melakukan perubahan untuk mengizinkan penggunaan back/forward cache (bfcache) untuk halaman yang menggunakan Cache-Control: no-store jika hal ini aman dilakukan. Cari tahu apa artinya bagi developer.

Latar belakang

Menetapkan Cache-Control: no-store sebagai Header HTTP adalah sinyal bahwa halaman tidak boleh disimpan dalam cache HTTP. Ini harus digunakan untuk halaman yang berisi data sensitif—misalnya, untuk halaman saat pengguna login—tetapi direktif no-store sering digunakan di halaman tanpa data sensitif.

Dengan bfcache, alih-alih menghancurkan halaman saat pengguna keluar, kita menunda penghancuran dan menjeda eksekusi JS. Jika pengguna segera kembali, kami akan menampilkan halaman lagi dan melanjutkan eksekusi JS. Hal ini menghasilkan navigasi halaman yang hampir instan bagi pengguna.

Meskipun tidak diwajibkan oleh spesifikasi HTML, browser biasanya menggunakan Cache-Control: no-store sebagai sinyal untuk menghindari penempatan halaman di bfcache. Hal ini adalah alasan terbesar bfcache tidak digunakan, untuk sekitar 17% navigasi histori di perangkat seluler dan 7% navigasi histori di desktop. Artinya, halaman ini tidak mendapatkan manfaat dari pemulihan cepat dan harus memuat ulang halaman sepenuhnya, termasuk panggilan jaringan, eksekusi JavaScript, dan rendering.

Cache-Control: no-store sering ditetapkan untuk menghindari masalah caching saat situs berubah, tetapi alasan ini kurang relevan saat bfcache digunakan, karena seluruh halaman dipulihkan hampir seolah-olah halaman tersebut dibiarkan terbuka.

Cara Chrome mengubah perilaku ini

Chrome telah mengumumkan niat untuk mengubah perilaku ini, tetapi mengambil pendekatan yang hati-hati terhadap perubahan ini. Kami telah menjalankan eksperimen sejak Chrome 116 dengan secara bertahap meningkatkan persentase pemuatan halaman dan hal ini diperkirakan akan mencapai 100% pada Maret dan April 2025.

Data sensitif

Meskipun analisis kami menunjukkan bahwa sebagian besar navigasi kembali atau maju tidak menyertakan data sensitif sehingga memenuhi syarat untuk bfcache, ada kasus ketika halaman tidak boleh ditempatkan di bfcache. Misalnya, saat logout, halaman yang login tidak boleh dapat diambil dengan kembali atau maju.

Untuk menghindari hal ini, Chrome akan mengeluarkan halaman dari bfcache saat ada perubahan pada cookie, atau metode otorisasi lainnya.

Selain itu, penggunaan API berikut untuk halaman yang menggunakan Cache-Control: no-store akan terus membuat halaman tersebut tidak memenuhi syarat untuk bfcache:

Perhatikan bahwa ini bukan daftar lengkap API yang mencegah penggunaan bfcache, tetapi API yang memblokir bfcache di halaman Cache-Control: no-store meskipun tidak digunakan saat meninggalkan halaman.

Waktu tunggu bfcache untuk halaman Cache-Control: no-store juga dikurangi menjadi 3 menit (dari 10 menit yang digunakan untuk halaman yang tidak menggunakan Cache-Control: no-store) untuk lebih mengurangi risiko.

Penolakan perusahaan

Perusahaan sering kali memiliki software yang sulit diupdate dan perangkat bersama. Kebijakan AllowBackForwardCacheForCacheControlNoStorePageEnabled dapat dinonaktifkan untuk terus mencegah penggunaan bfcache untuk halaman Cache-Control: no-store.

Menguji perubahan

Developer dapat menguji perubahan ini dengan tanda berikut:

--enable-features=CacheControlNoStoreEnterBackForwardCache:level/restore-unless-cookie-change

Jika salah satu pengecualian sebelumnya berlaku—misalnya, cookie berubah—hal ini akan mencegah halaman menggunakan bfcache dengan alasan "Halaman yang resource utamanya memiliki Cache-Control: no-store tidak dapat masuk ke back-forward cache" yang ditampilkan di penguji bfcache Chrome DevTools.

Anda dapat menggunakan halaman pengujian bfcache ini untuk melakukan pengujian dengan dan tanpa tanda ini.

Yang harus diketahui developer

Meskipun developer tidak perlu melakukan perubahan apa pun agar pengguna mereka dapat memanfaatkan penggunaan bfcache yang lebih besar ini, ada beberapa hal yang mungkin perlu mereka pertimbangkan sebagai akibatnya. Pertimbangan serupa ini mungkin dialami situs lain saat peluncuran awal bfcache pada Desember 2021.

Apakah developer masih harus berupaya mengurangi penggunaan Cache-Control: no-store?

bfcache diaktifkan untuk Cache-Control: no-store dalam situasi terbatas yang disebutkan sebelumnya dan hanya untuk Chrome. Browser lain mungkin masih memblokir penggunaan bfcache saat Cache-Control: no-store digunakan.

Praktik terbaiknya tetap meminimalkan penggunaan Cache-Control: no-store, bukan mengandalkan heuristik ini.

Dampak terhadap performa

Alasan kami melakukan perubahan ini adalah untuk meningkatkan kualitas pengalaman halaman bagi pengguna di web. Kami melihat peningkatan yang signifikan pada Core Web Vitals saat pertama kali meluncurkan bfcache, dan kini kami ingin menghadirkan peningkatan yang sama ke lebih banyak situs.

Pemilik situs mungkin melihat peningkatan pada Data Web Inti mereka saat fitur ini diluncurkan, dan dapat mengukur penggunaan bfcache di CrUX, termasuk di CrUX Vis.

Analisis dampak

Halaman yang dipulihkan dari bfcache "memulihkan" halaman lama (termasuk heap JavaScript) daripada memuat ulang halaman. Banyak penyedia analisis populer tidak mengukur pemulihan bfcache sebagai tayangan halaman baru karena hanya memicu tayangan halaman saat pertama kali dimuat.

Oleh karena itu, situs mungkin melihat penurunan pemuatan halaman dalam analisisnya saat mulai menggunakan bfcache untuk pertama kalinya. Sebaiknya pertimbangkan ini sebagai tayangan halaman, dengan menyetel pemroses untuk peristiwa pageshow dan memeriksa properti persisted:

// Send a pageview when the page is first loaded.
gtag('event', 'page_view');

// Send another pageview if the page is restored from bfcache.
window.addEventListener('pageshow', (event) => {
  if (event.persisted) {
    // Page was restored from bfcache, sent another page view.
    gtag('event', 'page_view');
  }
});

Menangani pembaruan saat pemulihan halaman

Karena situs kini dapat melihat penggunaan bfcache saat mereka tidak melihatnya sebelumnya dan saat halaman akan dimuat ulang sepenuhnya dengan data baru, developer mungkin ingin mempertimbangkan untuk memuat ulang data saat pemulihan bfcache.

Pembaruan dapat dipicu dengan cara yang serupa dengan mencatat tampilan halaman tambahan untuk analisis menggunakan peristiwa pageshow dan memeriksa properti persisted.

Perhatikan bahwa tidak semua konten perlu diperbarui dan pengguna mungkin lebih suka "kembali" ke konten yang mereka lihat sebelumnya. Misalnya, memuat ulang daftar artikel dapat berarti pengguna tidak lagi melihat artikel yang ingin mereka lihat kembali.

Dampak pada iklan

Mirip dengan dampak analisis, situs mungkin melihat penurunan tayangan iklan jika iklan hanya dimuat saat pemuatan halaman. Iklan dapat dimuat ulang secara terprogram saat pemulihan bfcache untuk memastikan kesamaan dengan pemuatan halaman penuh, sekali lagi menggunakan peristiwa pageshow dan memeriksa properti persisted, tetapi tidak selalu merupakan hal yang tepat untuk dilakukan. Lihat dokumentasi penyedia iklan Anda tentang cara memicu pemuatan ulang iklan.

Informasi selengkapnya tentang bfcache

Untuk mengetahui informasi selengkapnya tentang bfcache, lihat panduan teknis bfcache komprehensif kami.

Masukan

Kami ingin mendengar masukan tentang perubahan ini yang dapat diberikan di pelacak masalah Chrome menggunakan komponen bfcache.

Kesimpulan

Kami senang dapat menghadirkan manfaat bfcache ke lebih banyak halaman untuk meningkatkan kualitas halaman bagi pengguna. Kami telah mempertimbangkan perubahan ini dengan cermat dan pendekatan kami berupaya meluncurkannya seaman mungkin. Kami harap informasi yang diberikan di sini akan membantu developer memahami perubahan ini dan melakukan perubahan yang diperlukan untuk menghindari masalah saat perubahan ini terjadi.