IndexedDB'deki varsayılan dayanıklılık modunda yapılan değişiklik

IndexedDB'deki varsayılan dayanıklılık modu, Chrome 121'den itibaren strict yerine relaxed olarak değişecek. Bu ayar, performansı artırmak ve Firefox ile Safari gibi diğer büyük tarayıcılarla uyumlu hale getirmek için yapılmıştır. Bu blog yayınında, bu değişikliğin ayrıntıları ve web geliştiricileri için ne anlama geldiği açıklanmaktadır.

IndexedDB dayanıklılık modları

Büyük miktarda yapılandırılmış veri depolamak için güçlü bir web API'si olan IndexedDB, readwrite işlemleri için iki dayanıklılık modu sunar:

  • strict: Bu mod, işletim sistemine complete etkinliğini yayınlamadan önce değişiklikleri diske aktarmasını açıkça talimat verir.
  • relaxed Bu mod, varsayılan OS temizleme davranışını kullanır ve değişiklikler OS arabelleğine ulaştıktan sonra complete etkinliğini yayınlar. OS arabelleği genellikle birkaç saniyede bir temizlenir.

strict işlevinin, değişikliklerin gerçekten diske hemen yazılmasını sağlamadığını unutmayın. Bir site put() çağrısı yaptıktan sonra, güç kesintisinin değişikliğin diske kaydedilmemesine ve dolayısıyla uygulamanın bir sonraki çalıştırmasında eksik olmasına neden olabileceği belirli bir süre vardır.

strict dayanıklılık garantisi söz konusu olduğunda, IndexedDB işlem complete etkinliği, veriler gerçekten yazıldıktan sonra tetiklenir. relaxed dayanıklılık garantisinde ise complete etkinliği tetiklendiğinde veriler hâlâ yazılma sürecindedir. (Sürecin tamamı hakkında daha fazla bilgi için bu açıklamayı inceleyin).

Bu nedenle strict, yalnızca bir sonraki işlemi yapmadan önce kesinlikle yazılmış olduğunu bilmeniz gereken işlemler için kullanılır. Veri taşıma, strict dayanıklılığın gerekli olduğu bir örnektir. Bir yedek depolama alanından diğerine geçerken yenisi yazılana kadar eski biçimi silmek istemezsiniz. Bu sayede strict dayanıklılığı, taşıma işleminin ortasında bir hatadan kurtarabilecek bir taşıma rutinini kolaylaştırır.

Varsayılan dayanıklılık modu değişikliği

Bu değişikliğin önemli bir yönü, Chrome'daki readwrite işlemleri için varsayılan dayanıklılık modudur. Şimdiye kadar varsayılan değer strict idi. Bu değer, veri değişiklikleri için anında disk yazma işlemi yapılmasını sağlar. Ancak performansla ilgili nedenlerden ve relaxed kullanan diğer büyük tarayıcılarla uyumlu olmak için Chrome da varsayılan değeri relaxed olarak değiştirmeyi planlıyor.

Bu değişiklik, performans ile veri dayanıklılığı arasında daha iyi bir denge sağlamak için tasarlanmıştır. strict, maksimum veri dayanıklılığı sağlarken relaxed genellikle birçok web uygulaması için yeterlidir ve performansı aşağıdaki şekillerde önemli ölçüde artırabilir:

  • Hız: Chrome ekibi, gerçek hayattan örneklerde 3 ila 30 kat arasında hız iyileştirmesi elde etti.
  • Özellikle katı hal diski (SSD) bulunan cihazlarda disk dayanıklılığı.
  • Pil ömrünü uzatır.
  • Okuma hızında iyileştirme. Okuma işlemlerinin genellikle yazma işlemlerinin arkasından engellendiği IndexedDB mimarisinden dolayı, ikincil bir etki olarak okuma hızı artırılır.
  • Disk işlemleri paylaşılan bir sistem kaynağı olduğundan cihazın tamamı olumlu yönde etkilenir.

Birlikte çalışabilirlik ve uyumluluk

Bu değişikliğin önemli bir yönü, birlikte çalışabilirlik ve uyumluluk üzerindeki etkisidir. Chromium, diğer büyük tarayıcı tedarikçi firmalarının davranışıyla uyumlu hale gelerek birlikte çalışabilirliği artırır. Standartın kendisi farklı uygulamalara izin verir ve bu değişiklik, bu uygulamaları uyumlu hale getirmeyi amaçlar. Bu değişiklikle ilgili daha fazla bilgiyi bu GitHub sorununda bulabilirsiniz.

Bu durum web geliştiriciler için ne anlama geliyor?

Bu değişiklik yeni bir API yüzeyi sunmaz. Mevcut IndexedDB API aynı kalır ve bu değişiklik öncelikle readwrite işlemlerinin varsayılan davranışını etkiler. İşlem oluştururken tercih ettiğiniz dayanıklılık modunu belirleyebilirsiniz. Böylece veri dayanıklılığı ve performansı üzerinde kontrol sahibi olabilirsiniz. Aşağıdaki kod örneğinde, isteğe bağlı seçenekler dizisinde durability değerinin strict olarak ayarlanarak eski davranışın nasıl geri alınacağı gösterilmektedir.

let db;
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = (event) => {
  db = DBOpenRequest.result;
};
const transaction = db.transaction(
  ['toDoList'],
  'readwrite',
  { durability: 'strict' });

Değişikliği yayınlanmadan önce yerel olarak test etme

Bu değişiklik Chrome 121'de geçerli olacak. Yeni davranışı yerel olarak test etmek istiyorsanız chrome://flags'teki #indexed-db-default-durability-relaxed işaretini etkinleştirin.

Daha Fazla Bilgi

Bu değişiklikle ilgili daha fazla teknik ayrıntı ve güncelleme için izleme hatasını ve Chrome Platform Durumu girişini inceleyin.

Özetlemek gerekirse Chrome'un IndexedDB'deki varsayılan dayanıklılık modunu değiştirme kararı, diğer büyük tarayıcılarla uyumluluğu korurken performansı artırmayı amaçlamaktadır. Çoğu durumda, yeni varsayılan ayar performans iyileştirmeleri sağlayacağından herhangi bir işlem yapmamanızı öneririz. Gerekirse web uygulamalarınızda veri dayanıklılığı ve performansı kontrol ederek tercih ettiğiniz dayanıklılık modunu belirtmeye devam edebilirsiniz.

Teşekkür ederiz

Bu makale Evan Stade ve Rachel Andrew tarafından incelenmiştir.