تغيير في وضع المتانة التلقائي في IndexedDB

يتم تغيير وضع المتانة التلقائي في IndexedDB من strict إلى relaxed من Chrome 121. ويهدف هذا التعديل إلى تحسين الأداء والمواءمة مع المتصفحات الرئيسية الأخرى مثل Firefox وSafari. تشرح مشاركة المدونة تفاصيل هذا التغيير وتأثيره بالنسبة إلى مطوّري برامج الويب.

أوضاع المتانة لقاعدة البيانات المفهرسة

IndexedDB، وهي واجهة برمجة تطبيقات ويب فعّالة لتخزين كميات كبيرة من البيانات المنظَّمة، وتوفّر وضعين المتانة لمعاملات readwrite:

  • strict: يوجّه هذا الوضع نظام التشغيل صراحةً إلى مسح التغييرات على القرص قبل إصدار حدث complete.
  • relaxed يعتمد هذا الوضع على سلوك المسح التلقائي لنظام التشغيل ويصدر حدث complete بعد وصول التغييرات إلى المخزن المؤقت لنظام التشغيل، والذي يتم عادةً محوه كل بضع ثوانٍ.

وتجدر الإشارة إلى أنّ strict لا يضمن كتابة التغييرات فعليًا على الفور على القرص. بعد طلب الموقع الإلكتروني put()، تظل هناك فترة زمنية محدودة قد يؤدي خلالها انقطاع التيار الكهربائي إلى عدم اكتمال التغييرات في القرص، وبالتالي فقدان البيانات في المرة التالية التي يتم فيها تشغيل التطبيق.

عندما يتعلق الأمر بضمانات استمرارية strict، لا يتم تنشيط الحدث complete لمعاملة IndexedDB حتى بعد كتابة البيانات فعليًا، في حين أنّه في حال استخدام relaxed لاستمرارية البيانات، تظل البيانات في عملية كتابتها عند تنشيط حدث complete. (لمزيد من التفاصيل حول هذه العملية بالكامل، يُرجى الاطّلاع على هذا الشرح).

وبالتالي، إنّ السمة strict مخصّصة فقط للعمليات التي تحتاج مطلقًا إلى معرفة أنّه تمت كتابتها قبل اتخاذ الإجراء التالي. نقل البيانات هو مثال حيث يتطلّب استخدام strict متانة. عند الانتقال من متجر احتياطي إلى آخر، لا تريد حذف التنسيق القديم إلى أن تتم كتابة التنسيق الجديد. وبهذه الطريقة، تسهِّل متانة strict تنفيذ سلسلة إجراءات نقل بيانات يمكن أن تتعافى من عطل في منتصف عملية النقل.

التغيير التلقائي لوضع المتانة

يتمثل الجانب الأساسي في هذا التغيير في وضع الاستمرارية التلقائي لمعاملات readwrite في Chrome. وحتى الآن، كان الإعداد التلقائي هو strict، ما يضمن عمليات كتابة البيانات على القرص بشكل فوري. ومع ذلك، يخطّط Chrome أيضًا لتغيير الإعداد التلقائي إلى relaxed، وذلك بسبب الاعتبارات المتعلّقة بالأداء ولتوافقه مع المتصفحات الرئيسية الأخرى التي تستخدم جميعها relaxed.

يهدف هذا التغيير إلى تحقيق توازن أفضل بين الأداء واستمرارية البيانات. على الرغم من أنّ strict تضمن الحد الأقصى من متانة البيانات، فإنّ relaxed غالبًا ما تكون كافية للعديد من تطبيقات الويب ويمكنها تحسين الأداء بشكلٍ كبير بالطرق التالية

  • السرعة - في أمثلة العالم الحقيقي، شهد فريق Chrome تحسينات في السرعة بين عامل من 3 إلى 30.
  • متانة القرص، وخاصةً في الأجهزة المزوّدة بقرص صلب (SSD).
  • عمر البطارية أطول.
  • تحسين في سرعة القراءة نظرًا لبنية IndexedDB، حيث يتم غالبًا حظر معاملات القراءة خلف معاملات الكتابة، يتم تحسين سرعة القراءة كتأثير ثانوي.
  • يتأثر الجهاز بالكامل بشكل إيجابي، لأن عمليات القرص هي مورد نظام مشترك.

التوافقية والتوافق

يتمثل أحد الجوانب المهمة لهذا التغيير في تأثيره على إمكانية التشغيل التفاعلي والتوافق. من خلال التوافق مع سلوك مورّدي المتصفِّح الرئيسيين الآخرين، يحسِّن Chromium إمكانية التشغيل التفاعلي. يسمح المعيار نفسه بعمليات تنفيذ مختلفة، ويهدف هذا التغيير إلى المواءمة بين تلك الاستخدامات. يمكنك العثور على المزيد من السياق التاريخي لهذا التغيير في مشكلة GitHub هذه.

ما تأثير هذا التغيير في مطوّري البرامج على الويب؟

لا يؤدي هذا التغيير إلى إضافة أي مساحة عرض جديدة إلى واجهة برمجة التطبيقات. لم يتم إجراء أي تغييرات على واجهة IndexedDB API الحالية، وهذا التغيير يؤثر بشكل أساسي في السلوك التلقائي لمعاملات readwrite. يمكنك تحديد وضع الاستمرارية المفضّل لديك عند إنشاء المعاملات، ما يتيح لك التحكّم في استمرارية البيانات وأدائها. يوضّح نموذج الرمز البرمجي التالي كيفية استعادة السلوك القديم من خلال ضبط durability على strict في مصفوفة الخيارات الاختيارية.

let db;
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = (event) => {
  db = DBOpenRequest.result;
};
const transaction = db.transaction(
  ['toDoList'],
  'readwrite',
  { durability: 'strict' });

اختبار التغيير على الجهاز قبل الشحن

سيدخل التغيير حيّز التنفيذ في الإصدار 121 من Chrome. إذا كنت تريد اختبار السلوك الجديد على الجهاز قبل ذلك، يمكنك تفعيل علامة #indexed-db-default-durability-relaxed في chrome://flags.

مزيد من المعلومات

لمزيد من التفاصيل الفنية والتعديلات حول هذا التغيير، راجِع خطأ التتبُّع وإدخال حالة النظام الأساسي Chrome.

باختصار، تهدف خطوة Chrome إلى تغيير وضع الاستمرارية التلقائي في IndexedDB إلى تحسين الأداء مع الحفاظ على التوافق مع المتصفّحات الرئيسية الأخرى. في معظم الحالات، ننصح بعدم اتّخاذ أي إجراء، لأنّ الإعداد التلقائي الجديد سيوفّر تحسينات للأداء. وإذا لزم الأمر، يمكنك الاستمرار في تحديد وضع المتانة المفضّل لديك، مع التحكّم في استمرارية البيانات والأداء في تطبيقات الويب.

شكر وتقدير

تمت مراجعة هذه المقالة من قِبل إيفان ستاد وراشيل أندرو.