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 sisteminecomplete
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 sonracomplete
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.