Perubahan pada mode ketahanan default di IndexedDB

Mode ketahanan default di IndexedDB berubah dari strict menjadi relaxed dari Chrome 121. Penyesuaian ini dilakukan untuk meningkatkan performa dan agar selaras dengan browser utama lainnya, seperti Firefox dan Safari. Postingan blog ini menjelaskan detail perubahan ini dan artinya bagi developer web.

Mode ketahanan IndexedDB

IndexedDB, API web yang canggih untuk menyimpan data terstruktur dalam jumlah besar, menawarkan dua mode ketahanan untuk transaksi readwrite:

  • strict: mode ini secara eksplisit memerintahkan OS untuk mengosongkan perubahan pada disk sebelum mengeluarkan peristiwa complete.
  • relaxed mode ini bergantung pada perilaku flushing OS default dan mengeluarkan peristiwa complete setelah perubahan diterapkan ke buffer OS, yang biasanya dikosongkan setiap beberapa detik.

Perlu diperhatikan bahwa strict tidak memastikan bahwa perubahan benar-benar ditulis langsung ke disk. Setelah situs memanggil put(), masih ada waktu terbatas saat kegagalan daya dapat menyebabkan perubahan tidak masuk ke disk dan akan hilang saat aplikasi berjalan lagi.

Dalam hal jaminan ketahanan strict, peristiwa complete transaksi IndexedDB tidak akan diaktifkan hingga setelah data benar-benar ditulis, sedangkan dengan ketahanan relaxed, data masih dalam proses penulisan saat peristiwa complete diaktifkan. (Untuk mengetahui detail selengkapnya tentang proses lengkapnya, lihat penjelasan ini).

Jadi, strict hanya ditujukan untuk operasi yang benar-benar perlu Anda ketahui bahwa kode tersebut telah ditulis sebelum Anda melakukan tindakan berikutnya. Migrasi data adalah contoh yang memerlukan ketahanan strict. Saat berpindah dari satu penyimpanan cadangan ke penyimpanan pendukung lainnya, Anda tentu tidak ingin menghapus format lama sampai yang baru ditulis. Dengan demikian, ketahanan strict memfasilitasi rutinitas migrasi yang dapat pulih dari kegagalan di tengah jalan.

Perubahan mode ketahanan default

Aspek penting dari perubahan ini adalah mode ketahanan default untuk transaksi readwrite di Chrome. Hingga saat ini, defaultnya adalah strict, yang memastikan penulisan disk langsung untuk perubahan data. Namun, karena pertimbangan performa dan agar sesuai dengan browser utama lainnya yang semuanya menggunakan relaxed, Chrome juga berencana untuk mengubah default ke relaxed.

Perubahan ini dirancang untuk memberikan keseimbangan yang lebih baik antara performa dan ketahanan data. Meskipun strict memastikan ketahanan data yang maksimum, relaxed sering kali memadai untuk banyak aplikasi web dan dapat meningkatkan performa secara signifikan dengan cara berikut

  • Kecepatan—dalam contoh di dunia nyata, tim Chrome melihat peningkatan kecepatan antara 3 hingga 30.
  • Ketahanan disk, terutama untuk perangkat dengan Solid State Disk (SSD).
  • Masa pakai baterai yang lebih awet.
  • Peningkatan kecepatan baca. Karena arsitektur IndexedDB, tempat transaksi baca sering diblokir di belakang transaksi tulis, kecepatan baca ditingkatkan sebagai efek sekunder.
  • Seluruh perangkat akan terpengaruh secara positif, karena operasi disk adalah resource sistem bersama.

Interoperabilitas dan kompatibilitas

Salah satu aspek penting dari perubahan ini adalah dampaknya pada interoperabilitas dan kompatibilitas. Dengan menyelaraskan perilaku vendor browser besar lainnya, Chromium meningkatkan interoperabilitas. Standar itu sendiri memungkinkan implementasi yang berbeda, dan perubahan ini bertujuan untuk menyelaraskan implementasi tersebut. Anda dapat menemukan konteks historis selengkapnya terkait perubahan ini di Masalah GitHub ini.

Apa pengaruhnya bagi developer web?

Perubahan ini tidak memperkenalkan platform API baru. IndexedDB API yang ada tetap sama, dan perubahan ini terutama memengaruhi perilaku default transaksi readwrite. Anda dapat menentukan mode ketahanan yang diinginkan saat melakukan transaksi, sehingga memberi Anda kontrol atas ketahanan dan performa data. Contoh kode berikut menunjukkan cara mendapatkan kembali perilaku lama, dengan menetapkan durability ke strict dalam array opsi opsional.

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

Menguji perubahan secara lokal sebelum dikirim

Perubahan ini akan berlaku di Chrome 121. Jika Anda ingin menguji perilaku baru secara lokal sebelumnya, alihkan flag #indexed-db-default-durability-relaxed di chrome://flags.

Pelajari Lebih Lanjut

Untuk detail teknis dan info terbaru selengkapnya tentang perubahan ini, periksa bug pelacakan dan entri Status Platform Chrome.

Singkatnya, perpindahan Chrome untuk mengubah mode ketahanan default di IndexedDB bertujuan untuk meningkatkan kinerja sekaligus menjaga kompatibilitas dengan browser utama lainnya. Dalam kebanyakan kasus, rekomendasi kami adalah tidak melakukan apa pun, karena opsi default baru akan memberikan peningkatan performa. Jika diperlukan, Anda dapat terus menentukan mode ketahanan yang diinginkan, yang mengontrol performa dan ketahanan data di aplikasi web Anda.

Ucapan terima kasih

Artikel ini ditinjau oleh Evan Stade dan Rachel Andrew.