Umumiy

“Shared Preferences” sucks?!

(- “Shared Preferences” juda yomon-mi?!)

Salom ✨😊

Ma’lumotlarni lokal saqlash har bir mobil ilovaning muhim tarkibiy qismidir. Flutter-da ko’plab lokal saqlash yechimlari mavjud. Ushbu maqolada biz Flutter-dagi mashhur NoSQL lokal saqlash imkoniyatlari, jumladan Shared Preferences, GetStorage va Hive-ning ishlash jarayonini tahlil qilamiz. Qaysi usul/yechim sizga eng mos kelishini aniqlash uchun ushbu tahlildan foydalanishingiz mumkin.

Boshlaymiz ⌨️

Lokal saqlash imkoniyatlari:

1. Shared Preferences:

Kalit-qiymatga asoslangan ma’lumotlarni saqlash uchun oddiy saqlash usuli hisoblanadi. Kichik ma’lumotlar bo’laklarini, ayniqsa foydalanuvchi imtiyozlarini saqlash uchun yaxshi.

https://pub.dev/packages/shared_preferences

  1. GetStorage:

Boshqa kalit-qiymatga asoslangan saqlash yechimi, lekin u asinxron kutish tuzilmasini talab qilmaydi va foydalanishda soddaroq. O’rta o’lchamdagi ma’lumotlar va ilova sozlamalari uchun foydalidir. U foydalanish qulayligi bilan ajralib turadi.

https://pub.dev/packages/get_storage

  1. Hive (Uya):

Ma’lumotlarni ikkilik serializatsiyasi orqali saqlaydi. Flutter uchun juda tez kalit-qiymat saqlash yechimidir. Katta hajmdagi ma’lumotlarni tezda saqlash va olish uchun yaxshi (lekin zo’r emas, sababini pastroqda yozaman).

https://pub.dev/packages/hive

Ishlash tahlili:

Ishlash tahlili uchun biz har bir saqlash usuli uchun 1000 ta tasodifiy kalit-qiymat juftlarini yaratdik va ushbu ma’lumotlarni yozish va keyinchalik uni o’qish uchun sarflangan vaqtni o’lchadik. Bu ilovalarning umumiy ishlashini o’lchash uchun standart yondashuv.

O’lchov qanday amalga oshiriladi?

Ma’lumotlarimizda aytib o’tilgan benchmark yordamchi funksiyasi ma’lum bir harakat uchun o’tgan vaqtni millisekundlarda o’lchaydi. Ushbu funksiyadan foydalanib, biz konsolga har bir saqlash usuli uchun yozish va o’qish vaqtlarini chop etishimiz mumkin.

Sinov jarayoni:

1. 1000 ta tasodifiy kalit-qiymat juftligini yarating.
2. Belgilangan saqlash usuli yordamida ma’lumotlarni yozish uchun zarur bo’lgan vaqtni o’lchang.
3. Xuddi shu ma’lumotlarni o’qish uchun sarflangan vaqtni o’lchang.


Natijalar va tavsiyalar:

Ushbu kodni ishga tushirish orqali siz uchta saqlash usuli uchun yozish va o’qish vaqtlarini olishingiz mumkin. Bu vaqtlar qaysi saqlash yechimi siz uchun eng tez ekanligini ko’rsatadi. Biroq, tezlik faqat bitta omil. Saqlash yechimini tanlashda siz loyihangiz ehtiyojlarini, ma’lumotlarning tuzilishini va boshqa omillarni hisobga olishingiz kerak.

Lekin, ko’rib turganingizdek, bularning ichida eng sekini “Shared Preferences”. Shaxsiy tajribamndan aytadigan bo’lsam, bitta sessiyani ichida ma’lumotni saqlab o’sha sessiyada natija olishingiz kerak bo’lsa (ba’zida saqlab darhol olinadigan bo’lsa) bu yechim sizni “go’rga” tiqadi.
Sababi siz har safar lokal keyga “true” ni saqlab, o’sha zamondayoq u kalitdan hozir saqlangan ma’lumotingizni bevosita ololmaysiz. Olish uchun avval await prefs.reload(); qilib olishingiz kerak. Aks holda, ushbu usul sekinligi va asinxronligini xisobga olib, ko’p ehtimol bilan sizga o’sha sekundlarda eski axborot qaytishi mumkin. Bunday jarayonlarga siz uchun boshqa yechimni tavsiya qilaman: https://pub.dev/packages/flutter_session_manager.

Agar yozish va o’qish vaqtlari masalasi sizni qiziqtirmasa, baribir ham “SharedPreferences” yaxshi yechim bo’lmasligi mumkin. Bundan xavfsizroq yechim: Flutter Secure Storage (https://pub.dev/packages/flutter_secure_storage) bor! Bu yechim xar bir saqlangan axborotni shifrlaydi va xavfsizligini ta’minlaydi.

Shaxsiy tavsiya: Kichik ma’lumotlarni saqlash uchun – “GetStorage” ishlating!

(izoh shart emas)

Aslida bularning tarkibida “Isar” saqlash tizimi ham bo’lishi kerak edi. Lekin u ancha rivojlangan lokal keshlash usuli bo’lgani uchun, alohida maqola yozmoqchiman. Bu 3 ta yechim esa kamroq ma’lumotlarni lokal keshga saqlab turish uchun yetarli darajada yaxshi. Katta hajmli axborotlar uchun “raketa” πŸš€ singari tez va cheksiz kengayadigan “Isar” ayni paytda Flutter uchun eng yaxshi “NoSQL” yechimdir!

Xulosa:

Flutter-da lokal ma’lumotlarni saqlash opsiyalari orasidan tanlashda, ishlash, foydalanish qulayligi va loyihangiz talablarini hisobga oling. Umid qilamizki, ushbu maqola sizga eng mos yechimni tanlashda yordam beradi!

Ok, well, gotta go…

Prev Next