Site icon Cssmayo

IndexedDB: Database Lengkap di Dalam Browser untuk Aplikasi Web Modern

IndexedDB

JAKARTA, cssmayo.com – Menyimpan data di browser bukan hal baru — localStorage sudah ada sejak lama dan cukup berguna untuk data sederhana. Namun saat kebutuhan meningkat: menyimpan ribuan record, mencari data dengan query, menyimpan file biner, atau membangun aplikasi yang benar-benar bisa berjalan offline — localStorage tidak lagi memadai. IndexedDB hadir untuk mengisi kebutuhan itu dengan kemampuan yang jauh melampaui penyimpanan browser konvensional.

IndexedDB adalah API penyimpanan data berbasis browser yang menyediakan database NoSQL berorientasi objek langsung di dalam browser. Selain itu, IndexedDB mendukung penyimpanan data terstruktur dalam jumlah yang sangat besar — mulai dari teks, objek JavaScript, hingga file biner seperti gambar dan video — dengan kemampuan indexing dan querying yang sesungguhnya. Hasilnya adalah fondasi yang tepat untuk aplikasi web yang butuh data persistence yang kuat di sisi klien.

Konsep Utama IndexedDB

Sebelum menggunakan IndexedDB, ada beberapa konsep penting yang perlu dipahami:

Database: Setiap aplikasi web (per origin) bisa memiliki satu atau lebih database IndexedDB dengan nama yang berbeda. Setiap database memiliki versi yang digunakan untuk mengelola skema.

Object Store: Setara dengan tabel dalam database relasional, namun menyimpan objek JavaScript alih-alih baris dengan kolom tetap. Setiap object store memiliki key yang mengidentifikasi setiap record secara unik.

Index: Memungkinkan pencarian data berdasarkan properti selain key utama. Selain itu, index sangat penting untuk query yang efisien pada dataset besar.

Transaction: Semua operasi IndexedDB terjadi dalam konteks transaksi yang bersifat atomic — semua operasi dalam satu transaksi berhasil semua, atau gagal semua. Dengan demikian, integritas data selalu terjaga.

Cursor: Mekanisme untuk mengiterasi melalui banyak record dalam object store atau index — berguna untuk operasi batch atau paginasi.

Cara Kerja IndexedDB

IndexedDB bekerja secara asinkron menggunakan event-based API. Berikut alur dasar penggunaan:

javascript
// 1. Buka database
const request = indexedDB.open('MyDatabase', 1);

// 2. Setup skema saat pertama kali atau upgrade versi
request.onupgradeneeded = (event) => {
  const db = event.target.result;
  
  // Buat object store dengan auto-increment key
  const store = db.createObjectStore('users', { 
    keyPath: 'id', 
    autoIncrement: true 
  });
  
  // Buat index untuk pencarian berdasarkan email
  store.createIndex('email', 'email', { unique: true });
  store.createIndex('name', 'name', { unique: false });
};

// 3. Gunakan database setelah siap
request.onsuccess = (event) => {
  const db = event.target.result;
  
  // Tambah data
  const transaction = db.transaction(['users'], 'readwrite');
  const store = transaction.objectStore('users');
  
  store.add({ name: 'Budi', email: 'budi@example.com', age: 28 });
  
  transaction.oncomplete = () => console.log('Data berhasil disimpan');
};

IndexedDB dengan Library Modern

API asli IndexedDB cukup verbose dan berbasis event yang terasa kuno dibanding Promise dan async/await modern. Oleh karena itu, library wrapper sangat membantu dalam praktik:

idb (Jake Archibald): Library kecil yang membungkus IndexedDB dengan interface Promise-based yang bersih:

javascript
import { openDB } from 'idb';

const db = await openDB('MyDatabase', 1, {
  upgrade(db) {
    const store = db.createObjectStore('users', { keyPath: 'id', autoIncrement: true });
    store.createIndex('email', 'email', { unique: true });
  },
});

// Simpan data
await db.add('users', { name: 'Budi', email: 'budi@example.com' });

// Ambil semua data
const allUsers = await db.getAll('users');

// Cari berdasarkan index
const user = await db.getFromIndex('users', 'email', 'budi@example.com');

Selain itu, library lain seperti Dexie.js menawarkan API yang bahkan lebih ekspresif dengan dukungan query yang mirip SQL.

Kapan Menggunakan IndexedDB

IndexedDB adalah pilihan yang tepat untuk:

Perbandingan dengan Alternatif Lain

Fitur localStorage sessionStorage IndexedDB
Kapasitas ~5 MB ~5 MB Ratusan MB – GB
Tipe data String saja String saja Objek, file, biner
Query Tidak ada Tidak ada Ada (index)
Async Sinkron Sinkron Asinkron
Service Worker Tidak Tidak Ya

IndexedDB dan Service Worker: Kombinasi Offline yang Powerful

Salah satu keunggulan terbesar IndexedDB dibanding localStorage adalah kemampuannya bekerja langsung di dalam Service Worker. Service Worker adalah script yang berjalan di background browser, terpisah dari halaman utama, dan bertanggung jawab atas caching, push notification, dan sinkronisasi background. Kombinasi IndexedDB dan Service Worker inilah yang menjadi fondasi dari aplikasi web offline-first yang sesungguhnya.

Saat pengguna mengunjungi aplikasi dalam kondisi offline, Service Worker bisa mengambil data dari IndexedDB dan menyajikannya seolah-olah aplikasi sedang online. Hasilnya adalah pengalaman yang mulus tanpa pesan error “tidak ada koneksi” yang mengganggu. Selain itu, saat koneksi kembali tersedia, Service Worker bisa mensinkronisasi data yang disimpan sementara di IndexedDB ke server menggunakan Background Sync API.

Pola ini sangat berguna untuk aplikasi seperti email client yang bisa dibaca dan dijawab secara offline, aplikasi to-do yang terus bisa digunakan di mana saja, atau form yang tetap bisa diisi dan dikirim saat koneksi tidak stabil.

Tips Performa IndexedDB

Beberapa praktik yang memastikan IndexedDB berjalan dengan optimal:

Kesimpulan

IndexedDB adalah alat yang sangat powerful untuk developer yang ingin membangun aplikasi web dengan kemampuan penyimpanan data yang sesungguhnya di sisi klien. Meskipun API aslinya cukup kompleks, library modern seperti idb dan Dexie.js membuat penggunaannya jauh lebih mudah. Selain itu, dengan dukungan penuh dari semua browser modern dan kemampuan bekerja bersama Service Worker, IndexedDB adalah fondasi yang tepat untuk aplikasi web offline-first generasi berikutnya. Bagi developer yang serius membangun aplikasi web yang benar-benar bisa diandalkan bahkan tanpa koneksi internet, memahami dan menggunakan IndexedDB bukan lagi pilihan — melainkan kebutuhan yang mendasar.

Eksplorasi lebih dalam Tentang topik: Techno

Cobain Baca Artikel Lainnya Seperti: Web Share API: Bagikan Konten Web Langsung ke Aplikasi Native

Author

Exit mobile version