سيتم تغيير وضع الثبات التلقائي في IndexedDB من strict
إلى relaxed
اعتبارًا من الإصدار 121 من Chrome. يهدف هذا التعديل إلى تحسين الأداء ومواءمة الأداء مع المتصفّحات الرئيسية الأخرى، مثل Firefox وSafari. توضّح مشاركة المدوّنة تفاصيل هذا التغيير وتأثيره في مطوّري الويب.
أوضاع متانة IndexedDB
IndexedDB هي واجهة برمجة تطبيقات فعّالة للويب لتخزين كميات كبيرة من البيانات المنظَّمة، وتقدّم وضعَي متانة لمعاملات readwrite
:
strict
: يوجّه هذا الوضع نظام التشغيل صراحةً إلى تفريغ التغييرات على القرص قبل إصدار الحدثcomplete
.relaxed
يعتمد هذا الوضع على السلوك التلقائي لمحو بيانات نظام التشغيل ويُصدر الحدثcomplete
بعد وصول التغييرات إلى ذاكرة التخزين المؤقت لنظام التشغيل، والتي يتم عادةً محو بياناتها كل ثانيتين.
تجدر الإشارة إلى أنّ strict
لا تضمن فعليًا كتابة التغييرات على القرص على الفور. بعد أن يطلب موقع إلكتروني put()
، يبقى هناك مقدار محدود من الوقت يمكن خلاله أن يؤدي انقطاع التيار الكهربائي إلى عدم حفظ التغيير على القرص، وبالتالي لن يظهر التغيير في المرة التالية التي يتم فيها تشغيل التطبيق.
في ما يتعلق بضمانات strict
المتانة، لا يتم بدء حدث complete
لمعاملة IndexedDB إلا بعد كتابة البيانات فعليًا، في حين أنّه مع متانة relaxed
، لا تزال البيانات في عملية الكتابة عند بدء الحدث complete
. (لمزيد من التفاصيل حول العملية الكاملة، يمكنك الاطّلاع على هذا الشرح).
وبالتالي، لا يُستخدَم الرمز strict
إلا في العمليات التي تحتاج فيها بالتأكيد إلى معرفة أنّه قد تم كتابته قبل تنفيذ الخطوة التالية. يُعدّ نقل البيانات مثالاً على الحالات التي تتطلّب strict
المتانة. عند الانتقال من مساحة تخزين احتياطية إلى أخرى، لا تريد حذف التنسيق القديم إلى أن يتم كتابة التنسيق الجديد. بهذه الطريقة، تسهّل strict
ميزة "الاستمرارية" إجراء عملية نقل روتينية يمكنها استرداد البيانات في حال حدوث خطأ في منتصف العملية.
تغيير وضع "التحمل" التلقائي
ويتمثل الجانب المهمّ من هذا التغيير في وضع الثبات التلقائي لمعاملات readwrite
في Chrome. حتى الآن، كان الإعداد التلقائي هو strict
، ما يضمن عمليات الكتابة الفورية على القرص لتغييرات البيانات. ومع ذلك، بسبب اعتبارات الأداء ومواءمة المتصفّحات الرئيسية الأخرى التي تستخدم جميعها relaxed
، يخطّط Chrome أيضًا لتغيير الإعداد التلقائي إلى 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 إلى تحسين الأداء مع الحفاظ على التوافق مع المتصفحات الرئيسية الأخرى. في معظم الحالات، ننصحك بعدم اتّخاذ أي إجراء، لأنّ الإعداد التلقائي الجديد سيوفّر تحسينات في الأداء. يمكنك مواصلة تحديد وضع الثبات المفضّل لديك، إذا لزم الأمر، والتحكّم في ثبات البيانات وأدائها في تطبيقات الويب.
الشكر والتقدير
راجعت هذه المقالة كلّ من إيفان ستاد وراشيل أندرو.