Ana içeriğe geç

IndexedDB

Indexed Database API

Okunuşu
indekst di bi
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/indexeddb

Kısaca

IndexedDB, web tarayıcılarına yerleşik bir veritabanıdır; dosyalar dahil büyük miktarda yapılandırılmış veriyi indeksler ve transaction'larla cihazda saklar.

IndexedDB nedir?

IndexedDB, bir web sitesine tarayıcının içinde gerçek bir veritabanı verir. Tablolar yerine object store'lar vardır: her biri bir anahtar altında saklanan JavaScript nesnelerinden oluşan koleksiyonlar; örneğin bir not kendi id değeri altında saklanır. Kayıtları tarih gibi başka alanlara göre bulmak için indeksler ekleyebilir, okuma ve yazmaları ya tamamen gerçekleşen ya da hiç gerçekleşmeyen transaction'larda gruplayabilirsiniz. Değerler, JavaScript'in kopyalayabildiği neredeyse her şey olabilir: iç içe nesneler, tarihler ve dosyalar da dahil.

API asenkrondur; böylece büyük okuma ve yazmalar sayfayı dondurmaz: bir istek yaparsınız, sonuç daha sonra onsuccess gibi olaylarla gelir. Her veritabanının bir sürüm numarası vardır; kod onu daha yüksek bir numarayla açtığında onupgradeneeded olayı çalışır ve object store'ları burada oluşturur ya da değiştirirsiniz; bu, bir veritabanı migration'ına çok benzer. Diğer tarayıcı depolama alanları gibi her veritabanı tek bir origin'e aittir ve tarayıcılar local storage'a kıyasla çok daha fazla alan tanır; bu çoğu zaman boş diskin hatırı sayılır bir bölümüdür.

IndexedDB, çevrimdışı çalışabilen web uygulamalarının ve progressive web app'lerin arkasındaki depolamadır: uçakta çalışan e-posta istemcileri, taslakları cihaza kaydeden editörler ve API verisinin bir kopyasını tutan uygulamalar. Ham API oldukça uzun kod gerektirir; bu yüzden pek çok proje, promise desteği ekleyen idb ya da Dexie.js gibi küçük bir sarmalayıcı kütüphane kullanır.

IndexedDB en sık local storage ile karşılaştırılır. Local storage, yaklaşık 5 MB ile sınırlı, metin saklayan basit ve senkron bir depodur; bir tema ya da bir bayrak için uygundur. IndexedDB ise asenkrondur, yapılandırılmış veri ve dosya saklar, indeksleri ve transaction'ları destekler ve çok daha fazlasını tutar. Bir SQL veritabanı da değildir: tablo ya da sorgu yoktur; yalnızca anahtarlar, indeksler ve kayıtları tek tek dolaşan cursor'lar vardır.

Önemli noktalar

  • IndexedDB, büyük miktarda yapılandırılmış veri ve dosya için bir tarayıcı veritabanıdır.
  • Veri object store'larda durur ve anahtarla ya da indeksle bulunur.
  • API'si asenkrondur; transaction'lar ve sürümlü şema güncellemeleri içerir.
  • Her veritabanı tek bir origin'e aittir ve local storage'dan çok daha fazlasını tutabilir.
  • Çevrimdışı web uygulamalarına güç verir; idb gibi sarmalayıcılar API'yi kullanmayı kolaylaştırır.

Örnek

Bir object store oluşturup bir kayıt saklamakjavascript
const request = indexedDB.open("notes-app", 1);

// Runs the first time, or whenever the version number goes up
request.onupgradeneeded = () => {
  const store = request.result.createObjectStore("notes", { keyPath: "id" });
  store.createIndex("byDate", "createdAt");
};

request.onsuccess = () => {
  const db = request.result;
  const tx = db.transaction("notes", "readwrite");
  tx.objectStore("notes").put({ id: 1, text: "Buy milk", createdAt: Date.now() });
  tx.oncomplete = () => console.log("Saved");
};

Sık sorulan sorular

IndexedDB ile localStorage arasındaki fark nedir?

localStorage yalnızca metin saklar, origin başına yaklaşık 5 MB tutar ve çağrıları çalışırken sayfayı bekletir. IndexedDB ise nesne ve dosya saklar, çok daha fazlasını tutar, indeksleri ve transaction'ları destekler ve asenkron çalışır.

IndexedDB ne kadar veri saklayabilir?

Tarayıcıya ve boş disk alanına bağlıdır. Modern tarayıcılar çoğu zaman her origin'e yüzlerce megabayt ya da daha fazlasını verir; navigator.storage.estimate() ne kadarının kullanıldığını ve ne kadarının kaldığını bildirir.

IndexedDB verisi kalıcı mıdır?

Garanti değildir. Cihazda yer azaldığında tarayıcılar onu silebilir, kullanıcılar da silebilir. navigator.storage.persist() çağrısı, tarayıcıdan veriyi kullanıcı silene kadar tutmasını ister.

İlgili sayfalar

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar