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

ما هي IndexedDB؟

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

إذًا ما هي الميزات الجديدة؟

تغيير أصدقائي... لدينا بعض التغييرات التي ستنتج عنها بعض الأخطاء إذا لم نتعامل معها من خلال تغيير البنية البسيط.

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

ماذا يعني في التعليمة البرمجية؟ حسنًا، بدلاً من تمرير صفيف فارغ إلى قاعدة البيانات.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 واحدة فقط لكل متجر عناصر.

مصادر أخرى:

لذا إلى اللقاء في المرة القادمة... يُرجى مواصلة نشر الويب في مناطق قريبة.