Menyimpan ke cache

Penyimpanan cache adalah alat yang ampuh. Hal ini membuat aplikasi Anda tidak terlalu bergantung pada kondisi jaringan. Dengan penggunaan cache yang baik, Anda dapat membuat aplikasi web tersedia secara offline dan menayangkan aset secepat mungkin dalam kondisi jaringan apa pun. Seperti yang disebutkan di Aset dan Data, Anda dapat menentukan strategi terbaik untuk meng-cache aset yang diperlukan. Untuk mengelola cache yang berinteraksi oleh pekerja layanan Anda dengan Cache Storage API.

Dukungan Browser

  • Chrome: 43.
  • Edge: 16.
  • Firefox: 41.
  • Safari: 11.1.

Sumber

Cache Storage API tersedia dari berbagai konteks:

  • Konteks jendela (thread utama PWA Anda).
  • Pekerja layanan.
  • Pekerja lain yang Anda gunakan.

Salah satu keuntungan mengelola cache menggunakan pekerja layanan adalah siklus prosesnya tidak terikat dengan jendela, yang berarti Anda tidak memblokir thread utama. Perhatikan bahwa untuk menggunakan Cache Storage API, sebagian besar konteks ini harus berada dalam koneksi TLS.

Yang akan di-cache

Pertanyaan pertama yang mungkin Anda miliki tentang penyimpanan dalam cache adalah apa yang akan disimpan dalam cache. Meskipun tidak ada satu jawaban untuk pertanyaan tersebut, Anda dapat memulai dengan semua resource minimum yang diperlukan untuk merender antarmuka pengguna.

Referensi tersebut harus mencakup:

  • HTML halaman utama (start_url aplikasi Anda).
  • Stylesheet CSS yang diperlukan untuk antarmuka pengguna utama.
  • Gambar yang digunakan di antarmuka pengguna.
  • File JavaScript yang diperlukan untuk merender antarmuka pengguna.
  • Data, seperti file JSON, diperlukan untuk merender pengalaman dasar.
  • Font web.
  • Pada aplikasi multi-halaman, dokumen HTML lain yang ingin Anda tayangkan dengan cepat atau saat offline.

Siap offline

Meskipun kemampuan offline adalah salah satu persyaratan untuk Progressive Web App, penting untuk memahami bahwa tidak semua PWA memerlukan pengalaman offline penuh, misalnya solusi game cloud atau aplikasi aset kripto. Oleh karena itu, Anda dapat menawarkan antarmuka pengguna dasar yang memandu pengguna melalui situasi tersebut.

PWA Anda tidak boleh merender pesan error browser yang menyatakan bahwa mesin rendering web tidak dapat memuat halaman. Sebagai gantinya, gunakan pekerja layanan untuk menampilkan pesan Anda sendiri, sehingga menghindari error browser yang umum dan membingungkan.

Ada banyak strategi penyimpanan dalam cache yang dapat Anda gunakan, bergantung pada kebutuhan PWA Anda. Oleh karena itu, penting untuk merancang penggunaan cache guna memberikan pengalaman yang cepat dan andal. Misalnya, jika semua aset aplikasi Anda akan didownload dengan cepat, tidak menghabiskan banyak ruang, dan tidak perlu diperbarui dalam setiap permintaan, menyimpan semua aset Anda dalam cache akan menjadi strategi yang valid. Di sisi lain, jika Anda memiliki resource yang harus menggunakan versi terbaru, sebaiknya jangan menyimpan aset tersebut dalam cache sama sekali.

Menggunakan API

Gunakan Cache Storage API untuk menentukan kumpulan cache dalam origin Anda, yang masing-masing diidentifikasi dengan nama string yang dapat Anda tentukan. Akses API melalui objek caches, dan metode open memungkinkan pembuatan, atau pembukaan cache yang telah dibuat. Metode terbuka akan menampilkan promise untuk objek cache.

caches.open("pwa-assets")
.then(cache => {
  // you can download and store, delete or update resources with cache arguments
});

Mendownload dan menyimpan aset

Untuk meminta browser mendownload dan menyimpan aset, gunakan metode add atau addAll. Metode add membuat permintaan dan menyimpan satu respons HTTP, dan addAll sekelompok respons HTTP sebagai transaksi berdasarkan array permintaan atau URL.

caches.open("pwa-assets")
.then(cache => {
  cache.add("styles.css"); // it stores only one resource
  cache.addAll(["styles.css", "app.js"]); // it stores two resources
});

Antarmuka penyimpanan cache menyimpan keseluruhan respons, termasuk semua header dan isi. Akibatnya, Anda dapat mengambilnya nanti menggunakan permintaan HTTP atau URL sebagai kunci. Anda akan melihat cara melakukannya di bab Penayangan.

Kapan harus meng-cache

Di PWA, Anda bertanggung jawab untuk memutuskan kapan akan meng-cache file. Meskipun salah satu pendekatannya adalah menyimpan sebanyak mungkin aset saat pekerja layanan diinstal, hal ini biasanya bukan ide terbaik. Menyimpan resource yang tidak perlu dalam cache akan membuang bandwidth dan ruang penyimpanan serta dapat menyebabkan aplikasi Anda menayangkan resource yang sudah tidak berlaku.

Anda tidak perlu meng-cache semua aset sekaligus, Anda dapat meng-cache aset beberapa kali selama siklus proses PWA, seperti:

  • Saat penginstalan pekerja layanan.
  • Setelah pemuatan halaman pertama.
  • Saat pengguna membuka bagian atau rute.
  • Saat tidak ada aktivitas di jaringan.

Anda dapat meminta caching file baru di thread utama atau dalam konteks pekerja layanan.

Menyimpan aset dalam pekerja layanan

Salah satu skenario yang paling umum adalah menyimpan kumpulan aset minimum dalam cache saat pekerja layanan diinstal. Untuk melakukannya, Anda dapat menggunakan antarmuka penyimpanan cache dalam peristiwa install di pekerja layanan.

Karena thread pekerja layanan dapat dihentikan kapan saja, Anda dapat meminta browser untuk menunggu promise addAll selesai untuk meningkatkan peluang menyimpan semua aset dan menjaga aplikasi tetap konsisten. Contoh berikut menunjukkan cara melakukannya, menggunakan metode waitUntil dari argumen peristiwa yang diterima di pemroses peristiwa pekerja layanan.

const urlsToCache = ["/", "app.js", "styles.css", "logo.svg"];
self.addEventListener("install", event => {
   event.waitUntil(
      caches.open("pwa-assets")
      .then(cache => {
         return cache.addAll(urlsToCache);
      });
   );
});

Metode waitUntil() menerima promise dan meminta browser untuk menunggu tugas dalam promise diselesaikan (terpenuhi atau gagal) sebelum menghentikan proses pekerja layanan. Anda mungkin perlu membuat rantai promise dan menampilkan panggilan add() atau addAll() sehingga satu hasil masuk ke metode waitUntil().

Anda juga dapat menangani promise menggunakan sintaksis asinkron/menunggu. Dalam hal ini, Anda perlu membuat fungsi asinkron yang dapat memanggil await dan menampilkan promise ke waitUntil() setelah dipanggil, seperti pada contoh berikut:

const urlsToCache = ["/", "app.js", "styles.css", "logo.svg"];
self.addEventListener("install", (event) => {
   let cacheUrls = async () => {
      const cache = await caches.open("pwa-assets");
      return cache.addAll(urlsToCache);
   };
   event.waitUntil(cacheUrls());
});

Permintaan lintas-domain dan respons buram

PWA Anda dapat mendownload dan meng-cache aset dari asal dan lintas-domain Anda, seperti konten dari CDN pihak ketiga. Dengan aplikasi lintas-domain, interaksi cache sangat mirip dengan permintaan dengan origin yang sama. Permintaan dijalankan dan salinan respons disimpan dalam cache Anda. Seperti aset lain yang di-cache, aset ini hanya tersedia untuk digunakan di origin aplikasi Anda.

Aset akan disimpan sebagai respons buram, yang berarti kode Anda tidak akan dapat melihat atau mengubah konten atau header respons tersebut. Selain itu, respons buram tidak mengekspos ukuran sebenarnya di API penyimpanan, sehingga memengaruhi kuota. Beberapa browser menampilkan ukuran besar, seperti 7 Mb, terlepas dari apakah file hanya berukuran 1Kb.

Memperbarui dan menghapus aset

Anda dapat memperbarui aset menggunakan cache.put(request, response) dan menghapus aset dengan delete(request).

Lihat Dokumentasi objek cache untuk mengetahui detail selengkapnya.

Men-debug Penyimpanan Cache

Banyak browser menawarkan cara untuk men-debug konten penyimpanan cache dalam tab Aplikasi DevTools. Di sana, Anda dapat melihat konten setiap cache dalam origin saat ini. Kita akan membahas selengkapnya tentang alat ini di bab Alat dan Debug.

Chrome DevTools men-debug konten Penyimpanan Cache.

Resource