Cache Halaman, CDN dan Sepanduk Persetujuan: Cara Mengelak daripada Menyajikan Keadaan Persetujuan yang Salah
Halaman Pantas, Persetujuan Salah
Cache halaman ialah antara perkara terbaik yang boleh anda lakukan untuk kelajuan dan kos pengehosan. Ia juga salah satu cara paling mudah merosakkan tetapan persetujuan tanpa disedari. Cache melakukan tepat seperti yang diarahkan: menyimpan respons sekali dan menyajikannya kepada semua yang sepadan dengan kunci yang sama. Jika respons tersimpan itu mengandungi sesuatu yang khusus kepada pilihan persetujuan atau lokasi seorang pelawat, pelawat seterusnya menerimanya juga.
Panduan ini merangkumi lapisan cache yang lazimnya berada di hadapan tapak penerbit — cache edge CDN, pemalam cache halaman penuh, reverse proxy, service worker dan pelayar itu sendiri — serta cara menghalang setiap satu daripada menyajikan pengalaman persetujuan yang salah.
Peraturan Teras: Jauhkan Persetujuan daripada HTML yang Dicache
Seni bina paling selamat merender halaman HTML yang dicache sebagai neutral terhadap persetujuan. Halaman mengandungi pemuat CMP dan tag anda dalam keadaan disekat atau menunggu, tetapi tanpa keputusan tentang pelawat tertentu ini. CMP kemudian berjalan dalam pelayar, membaca pilihan yang disimpan, memutuskan sama ada hendak menunjukkan sepanduk, dan melepaskan tag dengan sewajarnya.
Masalah bermula apabila pelayan membuat keputusan persetujuan semasa render, contohnya:
- tema atau pemalam yang hanya mencetak tag iklan atau analitik apabila kuki persetujuan wujud;
- kod sebelah pelayan yang tidak menyertakan markup sepanduk untuk pelawat yang sudah memilih;
- templat yang membenamkan keadaan persetujuan pelawat dalam pemboleh ubah skrip sebaris.
Sebaik sahaja halaman itu dicache, keadaan pelawat pertama menjadi keadaan semua orang. Pelawat yang menolak penjejakan mungkin menerima halaman dengan tag yang sudah aktif, atau pelawat baharu mungkin tidak pernah melihat sepanduk kerana salinan cache datang daripada seseorang yang sudah menutupnya.
Mengapa “Vary: Cookie” Jarang Menjadi Jawapan
Pembetulan buku teks untuk kandungan setiap pelawat ialah memberitahu cache supaya berbeza mengikut pengepala kuki. Dalam praktiknya, pelawat membawa banyak kuki dengan nilai unik, jadi berbeza mengikut seluruh pengepala kuki biasanya menjadikan kadar cache hit hampir sifar. Sesetengah CDN membenarkan anda membina kunci cache daripada satu nilai kuki sahaja, yang boleh dilaksanakan jika kuki persetujuan anda mempunyai sedikit keadaan yang mungkin, tetapi ia menambah kerumitan dan masih menggandakan bilangan salinan yang dicache. Memindahkan keputusan ke dalam pelayar lebih mudah dan mengekalkan cache cekap.
Geografi di Edge
Ramai penerbit menunjukkan sepanduk berbeza mengikut wilayah: sepanduk pilih masuk untuk EU dan UK, notis pilih keluar untuk negeri AS, dan sesuatu yang lebih ringan di tempat lain. Jika pelayan memilih varian daripada alamat IP pelawat dan halaman itu dicache, pembaca Eropah boleh menerima halaman AS yang dicache, atau sebaliknya.
Tiga corak mengelakkan perkara ini:
- Geolokasi sebelah klien. Biarkan CMP menentukan wilayah dalam pelayar, supaya HTML yang dicache kekal sama untuk semua orang.
- Negara dalam kunci cache. Jika anda mesti memutuskan di edge, sertakan kod negara yang dibekalkan CDN anda dalam kunci cache. Anda mendapat satu salinan cache bagi setiap negara, yang boleh diramal.
- Logik edge tanpa cache. Jalankan keputusan wilayah dalam fungsi edge yang menyuntik nilai kecil tanpa cache ke dalam halaman yang selebihnya dicache.
Mana-mana yang anda pilih, dokumenkannya. Pepijat geo antara yang paling sukar dihasilkan semula, kerana ia hanya muncul kepada pelawat di satu tempat yang kebetulan menerima halaman yang dicache oleh seseorang di tempat lain.
Menyimpan Skrip CMP Itu Sendiri dalam Cache
Menyimpan pemuat CMP dalam cache untuk tempoh lama baik untuk prestasi, tetapi ada kosnya apabila konfigurasi berubah. Jika anda mengemas kini vendor, tujuan atau teks sepanduk dan skrip atau fail konfigurasi dicache selama setahun, sesetengah pelawat akan terus melihat versi lama. Semak cara CMP anda memberi versi pada failnya: nama fail atau parameter versi yang berubah membolehkan anda membuat cache secara agresif sambil tetap melancarkan perubahan serta-merta. Sahkan juga CDN anda sendiri tidak membuang rentetan pertanyaan daripada URL skrip pihak ketiga jika CMP bergantung padanya.
Service Worker dan Cache Luar Talian
Tapak dengan lapisan aplikasi web progresif sering menyimpan HTML dalam cache service worker. Peraturan yang sama terpakai: jangan sekali-kali menyimpan halaman yang mencerminkan keputusan persetujuan tertentu. Kecualikan endpoint berkaitan persetujuan dan halaman pusat keutamaan daripada cache service worker, dan pastikan konfigurasi CMP yang segar sentiasa boleh diambil.
Cache Kembali/Ke Hadapan
Pelayar moden menyimpan halaman yang baru dilawati dalam memori supaya butang kembali memulihkannya serta-merta. Jika pelawat membuka pusat keutamaan pada satu halaman, menarik balik persetujuan, kemudian menekan kembali, halaman yang dipulihkan mungkin masih menjalankan tag dari sebelumnya. Dengar peristiwa pageshow dan semak sifat persistednya: apabila halaman dipulihkan daripada cache ini, baca semula keadaan persetujuan yang disimpan dan hentikan atau mulakan tag supaya sepadan.
Rutin Pengujian
- Muatkan halaman dalam sesi bersih, tolak, kemudian muatkan halaman kedua dan sahkan tiada tag penjejakan dicetuskan.
- Ulang dengan pelayar bersih kedua dan sahkan sepanduk muncul, membuktikan ia tidak hilang akibat cache.
- Semak pengepala respons untuk melihat sama ada halaman disajikan daripada cache, dan bandingkan HTML dengan dan tanpa kuki persetujuan — ia patut sama.
- Uji dari sekurang-kurangnya dua wilayah selepas mengosongkan cache, kemudian sekali lagi selepas cache menjadi panas.
- Tarik balik persetujuan, gunakan butang kembali, dan sahkan tag berhenti.
Perkara Utama
- HTML yang dicache patut neutral terhadap persetujuan; biarkan CMP memutuskan dalam pelayar.
- Elakkan berbeza mengikut pengepala kuki penuh; ia memusnahkan kadar hit.
- Jika sepanduk berbeza mengikut wilayah, putuskan di sebelah klien atau tambah negara pada kunci cache.
- Beri versi pada fail CMP supaya hayat cache yang panjang tidak melewatkan perubahan konfigurasi.
- Uruskan service worker dan cache kembali/ke hadapan, dan uji dengan cache panas, bukan sekadar selepas dikosongkan.