Apa itu Data Cache? Apa Arti Clear Cache dan Apa Kegunaannya?

Pertama, apa itu cache?

Secara umum, cache (dilafalkan "cash") adalah jenis repositori. Anda dapat menganggap repositori sebagai depot penyimpanan. Di militer, ini akan digunakan untuk menyimpan senjata, makanan, dan persediaan lain yang diperlukan untuk menjalankan misi.

Dalam ilmu komputer, "persediaan" ini disebut sumber daya, dengan sumber daya adalah skrip, kode, dan konten dokumen. Yang terakhir terkadang lebih spesifik disebut sebagai "aset" seperti teks, data statis, media, dan hyperlink, tetapi di sini saya hanya akan menggunakan satu istilah sumber daya .

Perbedaan antara cache dan jenis repositori lainnya

Tujuan utama cache adalah untuk mempercepat pengambilan sumber daya halaman web, mengurangi waktu muat halaman. Aspek penting lainnya dari cache adalah memastikan bahwa cache berisi data yang relatif baru.

Artikel ini akan membahas dua metode umum cache: cache browser dan Jaringan Pengiriman Konten (CDN).

Selain cache, repositori lain ikut bermain dalam arsitektur web; sering kali ini dirancang untuk menyimpan banyak sekali data. Namun, mereka tidak terlalu fokus pada kinerja pengambilan.

Misalnya, Amazon Glacier adalah repositori data yang dirancang untuk menyimpan data dengan murah, tetapi tidak mengambilnya dengan cepat. Database SQL, di sisi lain, dirancang agar fleksibel, up-to-date, dan cepat, tetapi jarang murah dan biasanya tidak secepat cache.

Cache Browser: cache memori

Cache memori menyimpan sumber daya secara lokal di komputer tempat browser dijalankan. Saat browser aktif, sumber daya yang diambil akan disimpan di memori fisik (RAM) komputer, dan mungkin juga di hard drive.

Nanti, ketika sumber daya yang sama persis dibutuhkan saat mengunjungi kembali halaman web, browser akan menariknya dari cache, bukan dari server jarak jauh. Karena cache disimpan secara lokal, dalam memori cepat, sumber daya tersebut diambil lebih cepat, dan halaman memuat lebih cepat.

Kecepatan pengambilan sumber daya adalah yang terpenting, tetapi begitu juga kebutuhan agar sumber daya tersebut segar. Sumber daya yang usang adalah sumber daya yang kedaluwarsa dan mungkin tidak lagi valid.

Bagian dari tugas browser adalah mengidentifikasi sumber daya yang disimpan dalam cache yang usang, dan mengambil kembali yang sudah usang. Karena halaman web biasanya memiliki banyak sumber daya, biasanya akan ada campuran versi lama dan baru di cache.

Bagaimana browser mengetahui apa yang basi di cache?

Jawabannya tidak sederhana, tetapi ada dua pendekatan utama: cache-busting dan bidang header HTTP.

perusak cache

Orang Italia

Perusakan cache adalah teknik sisi server yang memastikan bahwa browser hanya mengambil sumber daya baru. Ini dilakukan secara tidak langsung.

Meskipun perusakan cache mungkin terdengar dramatis, itu benar-benar tidak merusak apa pun, dan bahkan tidak menyentuh apa yang sudah di-cache di browser. Yang dilakukan perusak cache hanyalah mengubah URI sumber daya asli dengan cara yang membuatnya terlihat oleh browser bahwa sumber daya tersebut benar-benar baru. Karena terlihat baru, ini tidak akan ada di cache browser. Versi lama dari sumber daya yang di-cache akan tetap di-cache, tetapi pada akhirnya akan layu dan mati, tidak pernah dapat diakses lagi.

Katakanlah saya memiliki halaman web yang terletak di www.foobar.com/about.htmlmana mengatakan segala sesuatu tentang foobar.com yang ingin Anda ketahui. Setelah Anda mengunjungi halaman itu, itu dan sumber daya yang terkait dengannya di-cache oleh browser.

Kemudian, foobar.com dibeli oleh perusahaan Quxbaz, dan konten halaman tentang mengalami perubahan yang signifikan. Cache browser tidak akan memiliki konten baru itu, namun mungkin masih percaya bahwa konten yang dimilikinya adalah yang terbaru dan tidak akan pernah mencoba untuk mengambilnya ulang.

Apa yang Anda, administrator web Quxbaz, lakukan untuk memastikan semua konten baru dikeluarkan?

Karena browser bergantung pada URI untuk menemukan item dalam cache, jika URI sumber daya berubah maka browser itu seperti belum pernah melihatnya sebelum mengambil sumber daya itu dari server.

Jadi, dengan mengubah URI sumber daya dari www.foobar.com/about.htmlmenjadi www.foobar.com/about2.html(atau ke www.quxbaz.com/about.html), browser tidak akan menemukan sumber daya cache apa pun yang terkait dengan URI tersebut, dan melakukan pengambilan penuh dari server. Sumber daya mungkin secara substansial sama dengan aslinya di bawah URI lama, tetapi browser tidak mengetahuinya.

Anda tidak perlu mengubah nama halaman. Karena URI juga termasuk string query dengan definisi, Anda dapat menambahkan parameter versi ke URI: www.foobar.com/about.html?v=2hef9eb1.

Dalam kasus ini, parameter versi v disetel menjadi nilai hash baru yang dibuat setiap kali konten berubah, atau dipicu oleh beberapa proses lain, seperti memulai ulang server. Browser melihat bahwa string kueri telah berubah, dan karena string kueri dapat memengaruhi apa yang akan dikembalikan, browser akan mengambil sumber daya terbaru dari server.

Tak satu pun dari teknik ini akan berfungsi jika URI lama diakses langsung dari bookmark. Kecuali jika browser diinstruksikan untuk memvalidasi ulang URI pada permintaan cache terakhir (atau sumber daya yang disimpan dalam cache sudah tidak berlaku), browser tidak akan melakukan pengambilan penuh untuk menyegarkan cache-nya. Ini membawa kita ke topik berikutnya.

Bidang header HTTP

Setiap permintaan sumber daya datang dengan beberapa informasi meta yang dikenal sebagai tajuk. Sebaliknya, setiap respons juga memiliki informasi header yang terkait dengannya.

Dalam beberapa kasus, browser melihat nilai header respons, dan mengubah nilai yang sesuai di header permintaan berikutnya. Di antara nilai-nilai header ini adalah nilai-nilai yang mempengaruhi bagaimana caching sumber daya dilakukan di browser.

Permintaan HEAD dan permintaan bersyarat

Permintaan HEAD seperti permintaan GET atau POST yang terpotong. Alih-alih meminta sumber daya yang lengkap, permintaan HEAD hanya meminta bidang header yang seharusnya dikembalikan pada permintaan lengkap.

Header sumber daya umumnya akan jauh lebih kecil (dalam jumlah total byte) daripada data sumber daya yang terkait dengannya ("isi" respons). Informasi header cukup informatif untuk memungkinkan browser menentukan kesegaran sumber daya dalam cache-nya.

Permintaan HEAD sering digunakan untuk memverifikasi validitas sumber daya server (yaitu, apakah sumber daya masih ada, dan jika demikian, apakah sudah diperbarui sejak terakhir kali browser mengaksesnya?). Browser akan menggunakan apa yang ada di cache jika permintaan HEAD menunjukkan sumber daya valid, jika tidak browser akan melakukan permintaan GET atau POST lengkap dan menyegarkan cache dengan apa yang dikembalikan.

Dengan permintaan bersyarat, browser mengirimkan kolom di header yang menjelaskan kesegaran resource yang di-cache. Kali ini, server menentukan apakah cache browser masih segar.

Jika ya, server mengembalikan respons 304 hanya dengan informasi header sumber daya, dan tanpa isi sumber daya (data). Jika cache browser ditentukan sebagai kedaluwarsa, maka server akan mengembalikan respons 200 OK penuh.

Mekanisme ini lebih cepat daripada menggunakan permintaan HEAD, karena ini menghilangkan kemungkinan harus mengeluarkan dua permintaan, bukan satu.

Hal di atas menyederhanakan apa yang bisa menjadi proses yang cukup rumit. Ada banyak penyesuaian yang terlibat dalam caching, tetapi semuanya dikontrol melalui kolom header, yang paling penting adalah kontrol cache.

Kontrol-Cache

Saat menanggapi permintaan, server akan mengirimkan kolom header ke browser yang menunjukkan perilaku apa yang harus disesuaikan saat melakukan cache. Jika saya memuat halaman di //en.wikipedia.org/wiki/Uniform_Resource_Identifier, respons berisi ini dalam catatan tajuknya:

cache-control: private, s-maxage=0, max-age=0, must-revalidate 

private artinya hanya browser yang harus menyimpan konten dokumen.

s-maxage dan max-age disetel ke 0 . Nilai s-maxage adalah untuk server proxy dengan cache, sedangkan max-age ditujukan untuk browser. Efek dari menyetel max-age saja adalah bahwa sumber daya yang di-cache segera berakhir, namun mungkin masih digunakan (meskipun sudah usang) selama pemuatan ulang halaman saat berada dalam sesi browser yang sama.

Sumber daya yang sudah usang dapat divalidasi ulang melalui permintaan HEAD, yang mungkin diikuti oleh permintaan GET atau POST, bergantung pada responsnya. Perintah must-revalidate memerintahkan browser untuk memvalidasi ulang sumber daya yang di-cache jika sudah usang.

Karena max-age disetel ke 0 dalam kasus ini, sumber daya yang di-cache langsung usang setelah diterima. Kombinasi dari dua direktif tersebut setara dengan satu direktif no-cache .

Kedua pengaturan tersebut memastikan bahwa browser selalu memvalidasi ulang sumber daya yang di-cache, apakah masih dalam sesi yang sama atau tidak.

Arahan kontrol-cache sangat luas, dan terkadang membingungkan - mereka adalah topik tersendiri. Daftar lengkap petunjuk yang terdokumentasi dapat ditemukan di sini.

E-tag

Ini adalah token yang dikirim server dan browser menyimpannya hingga permintaan berikutnya. Ini hanya digunakan ketika browser mengetahui bahwa masa pakai cache sumber daya telah kedaluwarsa.

E-tag adalah nilai hash yang dihasilkan server, yang sering menggunakan nama file fisik sumber daya dan tanggal terakhir diubah di server sebagai seed. Saat file sumber daya diperbarui, tanggal yang diubah berubah, dan nilai hash baru dibuat dan dikirim di header respons ke permintaan.

Tag header lain yang memengaruhi caching

Tag tajuk kedaluwarsa dan modifikasi terakhir semuanya sudah usang, namun masih dikirim oleh sebagian besar server untuk kompatibilitas dengan browser lama. Sebuah contoh:

expires: Thu, 01 Jan 1970 00:00:00 GMT last-modified: Sun, 01 Mar 2020 17:59:02 GMT 

Di sini, kedaluwarsa diatur ke tanggal nol (secara historis, dari sistem operasi UNIX). Itu menunjukkan bahwa sumber daya segera berakhir, seperti halnya max-age = 0 . Last-modified memberi tahu browser saat pembaruan terbaru dibuat ke sumber daya, yang kemudian dapat digunakan untuk memutuskan apakah harus mengambilnya ulang daripada menggunakan nilai cache.

Memaksa penyegaran cache dari browser

Apa itu hard reload?

Reload paksa memaksa pengambilan ulang semua resource di halaman, baik itu konten, skrip, stylesheet, atau media. Hampir semuanya, bukan?

Nah, beberapa sumber daya mungkin tidak disertakan secara eksplisit di halaman. Sebaliknya, mereka dapat diambil secara dinamis, biasanya setelah semua yang eksplisit dimuat.

Browser tidak mengetahui sebelumnya bahwa hal ini akan terjadi, dan jika demikian, permintaan selanjutnya (biasanya dimulai oleh skrip) akan tetap menggunakan salinan cache dari sumber daya tersebut jika tersedia.

Apa itu cache yang jelas dan hard reload?

Operasi ini membersihkan seluruh cache browser, yang memiliki efek yang sama seperti hard reload, tetapi juga menyebabkan sumber daya yang dimuat secara dinamis diambil juga - lagipula, tidak ada apa pun di cache, jadi tidak ada pilihan!

Jaringan Pengiriman Konten: cache berlokasi geografis

CDN lebih dari sekadar cache, tetapi caching adalah salah satu tugasnya. CDN menyimpan data di lokasi yang didistribusikan secara geografis sehingga waktu perjalanan pulang pergi ke dan dari browser lokal secara geografis berkurang.

Permintaan browser diarahkan ke CDN terdekat, sehingga mempersingkat data respons jarak fisik yang harus ditempuh. CDN juga mampu menangani lalu lintas dalam jumlah besar, dan memberikan keamanan terhadap beberapa jenis serangan.

CDN mendapatkan sumber dayanya melalui Internet Exchange Point (IXP), node yang merupakan bagian dari tulang punggung Internet (dalam huruf besar). Ada beberapa langkah yang harus dilakukan untuk menyiapkan perutean permintaan agar pergi ke CDN, bukan ke server host. Langkah selanjutnya adalah memastikan CDN memiliki konten situs web Anda saat ini.

Di masa lalu, sebagian besar CDN mendukung metode push: situs web akan mendorong konten baru ke hub CDN, yang kemudian akan didistribusikan ke node yang tersebar secara geografis.

Saat ini, kebanyakan CDN menggunakan protokol caching yang dijelaskan di atas (atau serupa) untuk 1) mengunduh sumber daya baru, dan 2) menyegarkan yang sudah ada. Browser masih memiliki cache-nya, dan tidak ada yang berubah. Yang dilakukan CDN hanyalah membuat transfer sumber daya baru lebih cepat.