Anda terjebak dalam perjuangan untuk keandalan jaringan. Cache HTTP browser adalah garis pertahanan pertama Anda, tetapi seperti yang telah Anda pelajari, cache ini hanya benar-benar efektif saat memuat URL berversi yang telah Anda kunjungi sebelumnya. Cache HTTP saja tidak cukup.
Untungnya, ada dua alat baru yang dapat membantu Anda: service worker dan Cache Storage API. Karena keduanya sering digunakan bersama, sebaiknya pelajari keduanya secara bersamaan.
Service worker
Service worker di-build ke dalam browser dan dikontrol oleh sedikit kode JavaScript tambahan yang harus Anda buat. Anda men-deploy file ini bersama file lain yang membentuk aplikasi web Anda yang sebenarnya.
Pekerja layanan memiliki beberapa kemampuan khusus. Di antara tugas lainnya, service worker dengan sabar menunggu aplikasi web Anda membuat permintaan keluar, lalu beraksi dengan mencegatnya. Tindakan yang dilakukan pekerja layanan terhadap permintaan yang ditangkap ini terserah Anda.
Untuk beberapa permintaan, tindakan terbaik mungkin adalah mengizinkan permintaan untuk melanjutkan ke jaringan, seperti yang akan terjadi jika tidak ada service worker sama sekali.
Namun, untuk permintaan lain, Anda dapat memanfaatkan sesuatu yang lebih fleksibel daripada cache HTTP browser, dan menampilkan respons cepat yang andal tanpa harus mengkhawatirkan jaringan. Hal ini memerlukan penggunaan bagian lain dari puzzle: Cache Storage API.
Cache Storage API
Cache Storage API membuka berbagai kemungkinan baru, dengan memberi developer kontrol penuh atas konten cache. Alih-alih mengandalkan kombinasi header HTTP dan heuristik bawaan browser, Cache Storage API mengekspos pendekatan berbasis kode untuk penyimpanan cache. Cache Storage API sangat berguna saat dipanggil dari JavaScript pekerja layanan Anda.
Tunggu… ada cache lain yang perlu dipikirkan sekarang?
Anda mungkin bertanya-tanya, "Apakah saya masih perlu mengonfigurasi header HTTP?" dan "Apa yang dapat saya lakukan dengan cache baru ini yang tidak dapat dilakukan dengan cache HTTP?" Jangan khawatir—itu adalah reaksi alami.
Sebaiknya Anda tetap mengonfigurasi header Cache-Control di server web, meskipun Anda tahu bahwa Anda menggunakan Cache Storage API. Anda biasanya dapat menetapkan Cache-Control: no-cache untuk URL tanpa versi, dan/atau Cache-Control: max-age=31536000 untuk URL yang berisi informasi pembuatan versi, seperti hash.
Saat mengisi cache Cache Storage API, browser
secara default akan memeriksa entri yang ada
di cache HTTP, dan menggunakannya jika ditemukan. Jika Anda menambahkan URL berversi ke
cache Cache Storage API, browser akan menghindari permintaan jaringan tambahan. Sisi
negatifnya adalah jika Anda menggunakan header Cache-Control yang salah dikonfigurasi,
seperti menentukan masa aktif cache yang lama untuk URL tanpa versi, Anda dapat
memperburuk keadaan
dengan menambahkan konten usang tersebut ke Cache Storage API. Mengurutkan perilaku cache HTTP Anda adalah prasyarat untuk menggunakan Cache Storage API secara efektif.
Mengenai apa yang kini dapat dilakukan dengan API baru ini, jawabannya adalah: banyak. Beberapa penggunaan umum yang akan sulit atau tidak mungkin dilakukan hanya dengan cache HTTP meliputi:
- Gunakan pendekatan "refresh di latar belakang" untuk konten yang di-cache, yang dikenal sebagai stale-while-revalidate.
- Terapkan batas jumlah maksimum aset yang akan di-cache, dan terapkan kebijakan masa berlaku kustom untuk menghapus item setelah batas tersebut tercapai.
- Bandingkan respons jaringan yang di-cache sebelumnya dan yang baru untuk melihat apakah ada yang berubah, dan memungkinkan pengguna memperbarui konten (misalnya, dengan tombol) saat data benar-benar telah diperbarui.
Lihat Cache API: Panduan singkat untuk mempelajari lebih lanjut.
Seluk-beluk API
Ada beberapa hal yang perlu diingat tentang desain API:
- Objek
Requestdigunakan sebagai kunci unik saat membaca dan menulis ke cache ini. Untuk memudahkan, Anda dapat meneruskan string URL seperti'https://example.com/index.html'sebagai kunci, bukan objekRequestyang sebenarnya, dan API akan otomatis menanganinya untuk Anda. - Objek
Responsedigunakan sebagai nilai dalam cache ini. - Header
Cache-ControlpadaResponsetertentu secara efektif diabaikan saat meng-cache data. Tidak ada pemeriksaan masa berlaku atau keaktualan otomatis bawaan, dan setelah Anda menyimpan item di cache, item tersebut akan tetap ada hingga kode Anda menghapusnya secara eksplisit. (Ada library untuk menyederhanakan pemeliharaan cache untuk Anda. Keduanya akan dibahas nanti dalam seri ini.) - Tidak seperti API sinkron yang lebih lama seperti
LocalStorage, semua operasi Cache Storage API bersifat asinkron.
Penjelasan singkat: Promise dan async/await
Service worker dan Cache Storage API menggunakan
konsep pemrograman asinkron.
Secara khusus, keduanya sangat bergantung pada promise untuk merepresentasikan hasil operasi asinkron di masa mendatang. Anda harus memahami
promise,
dan sintaksis
async/await
terkait, sebelum mempelajari lebih lanjut.
Jangan deploy kode tersebut… dulu
Meskipun memberikan fondasi yang penting, dan dapat digunakan apa adanya, service worker dan Cache Storage API secara efektif merupakan elemen penyusun tingkat rendah, dengan sejumlah kasus ekstrem dan "kejutan". Ada beberapa alat tingkat tinggi yang dapat membantu mempermudah bagian sulit dari API tersebut, dan menyediakan semua yang Anda butuhkan untuk membangun pekerja layanan yang siap produksi. Panduan berikutnya membahas salah satu alat tersebut: Workbox.