Progressive Web Apps (PWA) — Web Fundamentals

Progressive Web Apps (PWA) adalah website yang bisa berperilaku seperti aplikasi native — bisa di-install, bekerja offline, dan mengirim push notification…

Progressive Web App (PWA) adalah website yang bisa dipasang (di-install) di HP atau laptop kayak aplikasi biasa: punya ikon sendiri, terbuka di jendela sendiri tanpa address bar, dan tetap bisa dibuka waktu internet mati. Gak perlu lewat Play Store, cukup dari browser. Bahannya tiga: file manifest, HTTPS, dan service worker.

🧪 Tebakan cepat: aplikasi PWA yang sudah terpasang kamu buka waktu internet mati. Server gak bisa dihubungi, lalu siapa yang menyajikan halamannya? Tebak dulu, jawabannya ada di bagian "Service worker: penjaga di antara halaman dan internet".

Manifest: kartu identitas aplikasi

Manifest adalah file JSON yang memberi tahu browser nama aplikasi, ikonnya, dan cara membukanya:

{
  "name": "Kopi Senja",
  "short_name": "Senja",
  "start_url": "/",
  "display": "standalone",
  "theme_color": "#4f46e5",
  "icons": [
    { "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
    { "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" }
  ]
}

File ini (biasanya manifest.json) disambungkan ke halaman lewat satu baris di <head>:

<link rel="manifest" href="/manifest.json">

Chrome (juga Edge) baru menawarkan tombol Install kalau halamannya dibuka lewat HTTPS (HTTP yang terenkripsi, dari pelajaran HTTP) dan manifest-nya punya name atau short_name, ikon 192px dan 512px, start_url, serta display bernilai standalone, fullscreen atau minimal-ui. Buat latihan di laptop sendiri, http://localhost juga dianggap aman.

Service worker: penjaga di antara halaman dan internet

Service worker adalah file JavaScript (misalnya sw.js) yang dipasang browser di belakang halaman kamu. Setiap kali halaman minta file (HTML, CSS, gambar, data), permintaan itu lewat service worker dulu. Dia yang memutuskan: jawab pakai salinan di cache (simpanan file di perangkat), atau ambil dari server lewat internet.

halaman --> service worker --> cache (di perangkat)
                           \-> server (lewat internet)

Itu jawaban tebakannya: waktu offline, service worker menjawab dari cache, jadi aplikasi tetap tampil. Halaman memasangnya begini:

if ("serviceWorker" in navigator) {
  navigator.serviceWorker.register("/sw.js");
}

Cache first atau network first

Di dalam sw.js, kamu menentukan strategi: urutan mencari jawaban. Ini strategi cache first:

self.addEventListener("fetch", (event) => {
  event.respondWith(
    caches.match(event.request).then((cached) => cached || fetch(event.request))
  );
});
Strategi Cara kerja Cocok buat
Cache first cache dulu, server cuma kalau gak ada logo, font, file yang gak berubah
Network first server dulu, cache kalau offline data yang sering berubah: harga, stok, berita
Stale-while-revalidate tampilkan cache, sambil ambil versi baru buat nanti data yang boleh agak lama: foto profil, daftar artikel

Cache first paling cepat karena server gak ditanya sama sekali, tapi selama salinannya ada, perubahan di server gak pernah sampai ke layar. Network first selalu dapat versi terbaru, dan baru pakai cache kalau internet mati.

⚠️ Jebakan yang sering ketemu

💡 Service worker gak wajib buat tombol Install. Chrome sekarang sudah menawarkan Install cukup dengan HTTPS dan manifest. Tapi tanpa service worker, aplikasi yang sudah terpasang cuma menampilkan halaman "kamu offline" bawaan browser waktu internet mati. PWA yang benar-benar berguna tetap butuh service worker.

TL;DR: PWA adalah website yang bisa di-install dan jalan offline. Manifest (disambung lewat <link rel="manifest">) memberi name, ikon 192px dan 512px, start_url dan display: "standalone", dan semuanya harus lewat HTTPS. Service worker berdiri di antara halaman dan internet, dan menjawab dari cache waktu offline. Cache first buat file yang gak berubah, network first buat data yang sering berubah.

Yang akan kamu pelajari