Progressive Web Application atau disingkat PWA adalah aplikasi web yang dirancang agar terasa seperti aplikasi native yang biasa kita instal dari Play Store atau App Store. Bedanya, PWA bisa diakses langsung lewat browser tanpa perlu instalasi ribet, tapi tetap bisa dipasang di layar utama (home screen), berjalan offline, dan menerima notifikasi push.
Jadi, PWA itu seperti gabungan kelebihan web dan aplikasi mobile yang ringan, cepat, dan praktis.
Mengapa PWA Penting?
Pengalaman pengguna di era digital harus cepat dan mulus. Banyak website lambat, berat, atau tidak bisa diakses saat sinyal lemah. Dengan PWA, pengguna bisa:
- Akses website tanpa koneksi internet (offline mode)
- Memasang aplikasi langsung dari browser tanpa lewat toko aplikasi seperti Play Store maupun App Store
- Mendapat notifikasi seperti aplikasi native
- Menikmati tampilan responsif di berbagai perangkat
Beberapa brand besar sudah pakai PWA dan mendapat hasil positif, contohnya:
| Brand | Manfaat PWA yang Didapat |
|---|---|
| Twitter atau X | Aplikasi ringan hanya 1-2 MB, hemat data |
| Waktu penggunaan meningkat 40% | |
| YouTube | Memungkinkan streaming hemat data, cepat diakses di koneksi lambat, serta mudah dipasang dari browser. |
Cara Membuat PWA Sederhana: Panduan Lengkap dengan Contoh Kode
Kalau kamu developer atau ingin tahu cara bikin PWA, berikut langkah-langkah dasarnya:
HTTPS
PWA hanya berfungsi di koneksi yang aman (HTTPS). Pastikan websitemu sudah menggunakan HTTPS. Untuk development lokal,
localhostsudah dianggap aman.
Struktur Folder Sederhana
/simple-pwa/ ├── index.html ├── offline.html ├── manifest.json ├── service-worker.js ├── app.js ├── styles.css └── icons/ ├── icon-192x192.png └── icon-512x512.pngWeb App Manifest
File JSON yang menjelaskan aplikasi kamu ke browser: nama, ikon, warna tema, dan perilaku saat diinstall. Contoh
manifest.json:{ "name": "My Simple PWA", "short_name": "SimplePWA", "start_url": "/", "display": "standalone", "background_color": "#ffffff", "theme_color": "#007bff", "icons": [ { "src": "icons/icon-192x192.png", "sizes": "192x192", "type": "image/png" }, { "src": "icons/icon-512x512.png", "sizes": "512x512", "type": "image/png" } ] }Service Worker
File JavaScript yang berjalan di background browser untuk mengatur caching sehingga aplikasi bisa diakses offline dan lebih cepat. Contoh
service-worker.js:const CACHE_NAME = 'simple-pwa-cache-v1'; const filesToCache = [ '/', '/index.html', '/offline.html', '/styles.css', '/app.js', '/icons/icon-192x192.png', ]; // Saat install, cache file penting self.addEventListener("install", function (event) { event.waitUntil( caches.open(CACHE_NAME).then(function (cache) { return cache.addAll(filesToCache); }) ); }); // Saat fetch, coba ambil dari cache dulu self.addEventListener("activate", function (event) { event.waitUntil( caches.keys().then(function (keyList) { return Promise.all( keyList.map(function (key) { if (key !== CACHE_NAME) { return caches.delete(key); } }) ); }) ); }); // Saat activate, hapus cache lama dan jika dalam keadaan offline maka munculkan offline.html self.addEventListener("fetch", function (event) { if (event.request.method !== "GET") return; event.respondWith( fetch(event.request) .then(function (response) { return response; }) .catch(function () { return caches.open(CACHE_NAME).then(function (cache) { if (event.request.mode === "navigate") { return cache.match("/offline.html"); } return cache.match(event.request); }); }) ); });Daftarkan Service Worker di JavaScript utama
Agar browser tahu dan menjalankan service worker, daftarkan di file JS utama, misalnya
app.js:if ("serviceWorker" in navigator) { navigator.serviceWorker.register("/service-worker.js").then( (registration) => { console.log("Service worker registration succeeded"); }, (error) => { console.error(`Service worker registration failed`); }, ); } else { console.error("Service workers are not supported."); }Link Manifest dan Meta di
index.htmlMasukkan tag berikut supaya browser mengenali manifest dan warna tema aplikasi:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Simple PWA</title> <link rel="manifest" href="manifest.json" /> <meta name="theme-color" content="#007bff" /> <link rel="stylesheet" href="styles.css" /> </head> <body> <h1>Welcome to My Simple PWA</h1> <p>This is a Progressive Web App example.</p> <script src="app.js"></script> </body> </html>Tampilan Offline
Jika pengguna dalam keadaan offline maka PWA akan mengarahkan ke file cache yang bernama
offline.html:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Offline</title> </head> <body> <h1>You're offline</h1> </body> </html>
Jika kode di atas sudah berhasil di implementasikan, maka pada saat kode dijalankan akan muncul icon instal pada website seperti pada gambar di bawah ini:
Kesimpulan
PWA menghadirkan solusi jitu untuk aplikasi web masa depan yang cepat, responsif, dan hemat data. Selain lebih mudah diakses dan lebih murah dikembangkan dibanding aplikasi native, PWA juga memberikan pengalaman pengguna yang mulus tanpa harus instal aplikasi di Play Store, App Store, maupun di toko aplikasi lainnya.
0 Comments