Mode ketahanan default di IndexedDB berubah dari strict
menjadi relaxed
mulai Chrome 121. Penyesuaian ini dilakukan untuk meningkatkan performa dan menyelaraskan dengan browser utama lainnya seperti Firefox dan Safari. Postingan blog ini menjelaskan detail perubahan ini dan pengaruhnya 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 menginstruksikan OS untuk menghapus perubahan ke disk sebelum mengeluarkan peristiwacomplete
.relaxed
mode ini mengandalkan perilaku penghapusan OS default dan mengeluarkan peristiwacomplete
setelah perubahan masuk ke buffer OS, yang biasanya dihapus setiap beberapa detik.
Perlu diperhatikan bahwa strict
tidak memastikan bahwa perubahan benar-benar langsung ditulis ke disk. Setelah situs memanggil put()
, masih ada beberapa waktu terbatas selama pemadaman listrik dapat menyebabkan perubahan tidak masuk ke disk sehingga tidak ada saat aplikasi dijalankan lagi.
Dalam hal jaminan dengan ketahanan strict
, peristiwa complete
transaksi IndexedDB tidak 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 untuk operasi yang benar-benar perlu Anda ketahui telah ditulis sebelum Anda melakukan hal berikutnya. Migrasi data adalah contoh saat ketahanan strict
diperlukan. Saat berpindah dari satu penyimpanan pendukung ke penyimpanan pendukung lainnya, Anda tidak ingin menghapus format lama hingga format baru ditulis. Dengan cara ini, 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, nilai defaultnya adalah strict
, yang memastikan penulisan disk langsung untuk perubahan data. Namun, karena pertimbangan performa dan untuk menyesuaikan dengan browser utama lainnya yang semuanya menggunakan relaxed
, Chrome juga berencana mengubah setelan default menjadi relaxed
.
Perubahan ini dirancang untuk memberikan keseimbangan yang lebih baik antara performa dan ketahanan data. Meskipun strict
memastikan ketahanan data maksimum, relaxed
sering kali cukup 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 faktor 3 dan 30.
- Ketahanan disk, terutama untuk perangkat dengan Solid State Disk (SSD).
- Masa pakai baterai yang lebih lama.
- Peningkatan kecepatan baca. Karena arsitektur IndexedDB, yang sering memblokir transaksi baca di belakang transaksi tulis, kecepatan baca ditingkatkan sebagai efek sekunder.
- Seluruh perangkat terpengaruh secara positif, karena operasi disk adalah resource sistem bersama.
Interoperabilitas dan kompatibilitas
Salah satu aspek penting dari perubahan ini adalah dampaknya terhadap interoperabilitas dan kompatibilitas. Dengan menyelaraskan perilaku vendor browser utama 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 tentang 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 membuat transaksi, sehingga Anda dapat mengontrol 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 tanda #indexed-db-default-durability-relaxed
di chrome://flags
.
Pelajari Lebih Lanjut
Untuk mengetahui detail teknis dan info terbaru tentang perubahan ini, lihat bug pelacakan dan entri Status Platform Chrome.
Singkatnya, langkah Chrome untuk mengubah mode ketahanan default di IndexedDB bertujuan untuk meningkatkan performa sekaligus mempertahankan kompatibilitas dengan browser utama lainnya. Dalam sebagian besar kasus, rekomendasi kami adalah tidak melakukan apa pun, karena setelan default baru akan memberikan peningkatan performa. Jika diperlukan, Anda dapat terus menentukan mode ketahanan yang diinginkan, dengan mengontrol ketahanan dan performa data di aplikasi web Anda.
Ucapan terima kasih
Artikel ini ditinjau oleh Evan Stade dan Rachel Andrew.