تحديد النطاق في معاملات IndexedDB

ما هو IndexedDB؟

IndexedDB هو معيار ويب متطور لتخزين كميات كبيرة من البيانات المنظَّمة في المتصفّح وللبحث عن هذه البيانات بأداء عالٍ باستخدام الفهارس. بعبارة أخرى، IndexedDB هو مخزن عناصر. وهي ليست مثل قاعدة البيانات العلائقية التي تحتوي على جداول تتضمّن صفوفًا وأعمدة مجموعات. وهذا فرق مهمّ وأساسي يؤثر في طريقة تصميم تطبيقاتك وإنشائها (مزيد من المعلومات حول المفاهيم الأساسية).

ما هي الميزات الجديدة؟

التغييرات يا رفاق... لدينا بعض التغييرات التي ستؤدي إلى ظهور بعض الأخطاء إذا لم نتعامل معها من خلال تغيير بسيط في البنية.

اعتبارًا من الإصدار 17 فصاعدًا، سيُظهر Chrome الآن خطأً إذا لم يكن نطاق معاملة IndexedDB محصورًا بمستودع عناصر. بما أنّ جميع عمليات قراءة البيانات وكتابتها تتم ضمن المعاملات، علينا إنشاء معاملة في قاعدة بيانات وتحديد النطاق (مثل أنظمة تخزين الكائنات التي تريد الوصول إليها) وتحديد نوع الوصول (قراءة فقط أو كتابة).

ما المقصود بذلك في الرمز؟ حسنًا، بدلاً من تمرير صفيف فارغ إلى database.transaction:

var transaction = db.transaction([], IDBTransaction.READ_ONLY);

يجب تحديد نطاق لمساحة تخزين ملفّات تعريفية معيّنة أو قائمة بمساحات تخزين ملفّات تعريفية:

// all stores (equivalent to what use to be marked as empty array. )
var transaction = db.transaction(db.objectStoreNames, IDBTransaction.READ_ONLY);

// multiple stores:
var transaction = db.transaction(['ObjectStoreName1', 'ObjectStoreName2'],
    IDBTransaction.READ_ONLY);

// single store - these are equivalent
var transaction = db.transaction(['ObjectStoreName'], IDBTransaction.READ_ONLY);
var transaction = db.transaction('ObjectStoreName', IDBTransaction.READ_ONLY);

يمكنك تسريع الوصول إلى البيانات باستخدام النطاق والوضع المناسبَين في المعاملة. في ما يلي بعض النصائح: عند تحديد النطاق، حدِّد فقط ملفّات تخزين الكائنات التي تحتاج إليها. بهذه الطريقة، يمكنك تنفيذ معاملات متعددة بنطاقات غير متداخلة بشكل متزامن. حدِّد وضع المعاملة READ_WRITE عند الضرورة فقط. يمكنك تنفيذ معاملات READ_ONLY متعددة في الوقت نفسه ذات نطاقات متداخلة، ولكن يمكنك إجراء معاملة READ_WRITE واحدة فقط لمتجر عناصر.

مصادر أخرى:

إلى اللقاء في المرة القادمة، وننصحك بمواصلة نشر المحتوى على الويب في المناطق المجاورة.