Simpan kunci dan nilai DB yang diindeks kecil jika Anda menginginkan kinerja yang baik!

24 Januari 2024 [JavaScript, Performance, Programming, Tech, TypeScript]

Dalam pekerjaan kami baru-baru ini di Web Elemen (secara khusus mencoba mengganti kode enkripsi kami dengan implementasi karat lintas platform kami), kami telah memperhatikan beberapa perilaku aneh dengan kinerja kueri DB kami yang diindeks.

Kami telah mengetahui beberapa perlambatan, dan bertanya -tanya apakah itu terkait dengan kunci yang kami ambil dalam kode karat (yang dikompilasi ke Wasm untuk proyek ini), tetapi sebenarnya kami telah melacak masalah terbaru hingga waktu yang dihabiskan di dalam kueri DB yang diindeks.

Hal mengejutkan pertama yang kami temukan adalah bahwa beberapa pertanyaan lambat kami hanya menghitung jumlah catatan di sebuah toko. Ketika kami menggali lebih dalam, kami mulai mencurigai bahwa ukuran nilai yang kami simpan mempengaruhi kinerja.

Saya merancang halaman uji sederhana dan kami mengukur beberapa hasil. Anda dapat melihat grafik interaktif dan dan merekam pada perangkat Anda sendiri di sini: buatan worlds.net/indexed-db-perf. Saya berharap dapat memperluas halaman ini ke lebih banyak perangkat dan lebih banyak operasi dari waktu ke waktu, jadi periksa kembali dan/atau berkontribusi hasil. Kode sumber ada di codeberg.org/andybalaam/indexed-db-perf.

Perhatikan bahwa analisis saya didasarkan pada browser yang tersedia secara luas pada Januari 2024, dan mungkin menjadi ketinggalan zaman.

Inilah kesimpulan saya sejauh ini.

Judul 1: Menghitung catatan di toko Anda bisa lambat

Jika kami memiliki kunci atau nilai besar, dan kami mencoba mencari tahu berapa banyak catatan yang ada di toko yang berisi 200 ribu, itu akan sangat lambat (6 detik pada kromium saya).

Cobalah untuk menghindari penghitungan catatan saat Anda bisa, dan mempertimbangkan caching penghitungan dalam kode Anda sendiri jika Anda sering membutuhkannya.

Kelambatan penghitungan mungkin juga menunjukkan bahwa operasi yang berjalan semua catatan juga akan lambat, jadi pikirkan dengan cermat kapan dan apakah Anda perlu melakukan itu, dan berharap untuk memberikan umpan balik kepada pengguna Anda saat Anda melakukannya.

Jangan menghitung atau berjalan semua catatan kecuali Anda harus melakukannya.

Headline 2: Long Keys Hurt Performance

Grafik 3D yang menunjukkan bahwa Keys Long (2000) dan sejumlah besar catatan (200K) menghasilkan waktu 800ms untuk menghitung catatan.

Di Firefox, karena kunci semakin lama, kinerja dengan sejumlah besar catatan menjadi lebih lambat.

Waktu yang dibutuhkan untuk menghitung catatan tumbuh secara linier dengan panjang tombol, dan menjadi besar ketika kunci lebih dari 50 byte (500 byte di Firefox).

Semakin pendek kunci Anda, semakin baik.

Judul 3: Nilai Besar Melukai Kinerja

Grafik yang menunjukkan dapat memakan waktu 6 detik untuk menghitung catatan dengan nilai besar (50k) dan banyak catatan (200k (

Pada Chrome, karena nilai semakin besar, kinerja dengan sejumlah besar catatan menjadi lebih lambat.

Waktu yang diperlukan untuk menghitung catatan tumbuh secara linier dengan ukuran nilai yang Anda simpan, dan menjadi besar ketika nilai lebih dari 1k dalam ukuran (10k di Firefox).

Semakin kecil nilai -nilai Anda, semakin baik.

Judul 4: Jumlah catatan penting

Grafik yang menunjukkan kinerja pada Firefox terdegradasi dengan cepat setelah sekitar 50 ribu catatan.

Pada Firefox lebih dari 50 ribu catatan (dengan kunci atau nilai besar), kinerja menurun dengan cepat.

Jika Anda menyimpan nilai besar (> 1k) atau kunci besar (> 50 byte), dan Anda perlu berjalan semua catatan secara teratur, Anda mungkin harus mencoba menyimpan jumlah catatan di bawah 50k jika Anda ingin kinerja interaktif – karena itu dengan cepat meningkat ke urutan detik.

Di Firefox di Intel, tampaknya cukup stabil setelah 50 ribu, jadi jika Anda secara eksklusif menargetkan Firefox pada Intel, toko yang lebih besar layak, tetapi Anda perlu mengelola pengalaman pengguna di sekitar ~ 1 detik ini.

Dalam kromium, kinerja terus menurun seiring dengan meningkatnya jumlah catatan. Ini mencapai waktu yang benar -benar mengerikan (6 detik) dengan kunci besar (2000 byte) dan jumlah besar (200k).

Simpan di bawah 50 ribu catatan jika Anda bisa.

Judul 5: Kinerja DB yang diindeks saat ini sangat buruk di Apple M1

Grafik yang menunjukkan catatan penghitungan dapat memakan waktu 12 detik pada Apple M1.

Chrome pada perangkat keras Apple M1 membutuhkan waktu 12 detik untuk melakukan operasi yang memakan waktu 2,5 detik di Intel.

Kinerja DB yang diindeks Firefox pada Apple M1 ~ 10 kali lebih lambat dari pada Intel, membutuhkan waktu 8 detik untuk menghitung 200k catatan besar.

Kinerja Chrome dengan kunci besar (> 1000 byte) cukup bencana ketika jumlah baris mendekati 50K. Dibutuhkan 12 detik untuk menghitung rekor 200k dengan kunci panjang 2000, ~ 6x lebih lambat dari pada Intel.

Kedua browser di M1 menabrak dinding sekitar 50 ribu catatan, di mana kinerja mereka dengan kunci besar atau nilai besar dengan cepat menurun ke tingkat yang hampir tidak dapat digunakan. Satu -satunya opsi untuk kinerja yang layak adalah menjaga kunci pendek dan nilai kecil.

Tes pada Apple M1 – Ini memiliki masalah serius sekarang!

Pengamatan: Firefox lebih cepat dari Chromium

Grafik yang menunjukkan bahwa untuk menghitung sejumlah besar catatan besar, Firefox membutuhkan 0,8 detik dan kromium membutuhkan waktu 6 detik.

Chrome membutuhkan waktu 6 detik untuk menghitung sejumlah besar nilai besar, dan Firefox membutuhkan 0,8 detik untuk melakukan hal yang sama.

Pada saat penulisan, DB yang diindeks Firefox tampaknya jauh lebih cepat daripada Chromium ketika berurusan dengan sejumlah besar catatan. Dalam beberapa skenario, lebih dari 7 kali lebih cepat.

Catatan Sisi: Nilai string lebih baik dari array angka

UPDATE: Lihat Don’t Store Array of Numbers di Indeksed DB – Gunakan Base64 sebagai gantinya.

Saya tidak memiliki bukti formal untuk ini karena saya kehabisan waktu untuk penyelidikan saya, tetapi eksplorasi awal saya menunjukkan bahwa mengkode string sebagai array angka, satu untuk setiap karakter, memperlambat kinerja lebih dari 10 kali.

(Saya pikir) Anda harus menggunakan string alih -alih array angka.

Kesimpulan

Hati -hati dengan Apple M1!

Sementara itu, jika Anda perlu meningkatkan kinerja situs web berbasis DB Anda, Anda memiliki tiga opsi:

  1. Menyimpan lebih sedikit catatan,
  2. Mengurangi ukuran catatan, atau
  3. Kurangi panjang tombol.

1 dan 2 mungkin lebih sulit dari 3. Jadi pertimbangkan 3 terlebih dahulu.

Jika Anda menjaga panjang dan nilai kunci kecil, Anda dapat memiliki banyak catatan.

Jelajahi grafik di sini: buatanworlds.net/indexed-db-perf

Lihat juga: Jangan menyimpan array angka dalam db yang diindeks – Gunakan base64 sebagai gantinya dan menghapus toko DB yang diindeks bisa sangat lambat di Firefox.

Game News

Berita Olahraga

News

Berita Terkini

Berita Terbaru

Berita Teknologi

Seputar Teknologi

Drama Korea

Resep Masakan

Pendidikan

Berita Terbaru

Berita Terbaru

Download Film

Gaming center adalah sebuah tempat atau fasilitas yang menyediakan berbagai perangkat dan layanan untuk bermain video game, baik di PC, konsol, maupun mesin arcade. Gaming center ini bisa dikunjungi oleh siapa saja yang ingin bermain game secara individu atau bersama teman-teman. Beberapa gaming center juga sering digunakan sebagai lokasi turnamen game atau esports.