يُحسِّن تحسين جديد في Chrome طريقة تخزين بيانات IndexedDB على القرص. تركّز هذه التحسينات على كيفية إدارة القيم الكبيرة ضمن نظام التخزين في Chrome، وذلك عن طريق إدخال ميزة الضغط على ملفات معيّنة مخزّنة على القرص. وتلخّص المقالة النقاط الرئيسية لهذا التعديل.
آلية التخزين في Chrome قبل الإصدار 129
يستخدم Chrome LevelDB لتخزين بيانات IndexedDB على القرص. LevelDB هي مكتبة تخزين سريعة للمفاتيح والقيم، ولكنها تواجه صعوبة عندما تتجاوز القيم الفردية حجم صفحة قاعدة البيانات. لحلّ هذه المشكلة، منذ عام 2017، يخزّن Chrome القيم الأكبر من صفحة واحدة كملفات عادية على القرص بجانب ملف قاعدة البيانات.
مساحة التخزين من الإصدار 129
ضغط القيم الكبيرة
على عكس المحتوى المخزّن مباشرةً في قاعدة بيانات LevelDB، والذي يتم ضغطه قبل كتابته على القرص وفك ضغطه بعد قراءته، لم يتم ضغط الملفات الكبيرة المخزّنة كملفات عادية. من خلال التحديث الجديد، سيضغط Chrome الآن هذه الملفات الكبيرة باستخدام مكتبة ضغط Snappy في الوقت الفعلي، ما يؤدي إلى توفير مساحة كبيرة. ويُعدّ ذلك فعّالاً بشكل خاص للبيانات المنظَّمة، مثل الصفائف الكبيرة من قيم JavaScript أو XML أو JSON. ولا يكون هذا الإجراء فعّالاً مع ملفات الوسائط الكبيرة التي سبق ضغطها، أو في الحالات الأقل شيوعًا التي يُجري فيها الموقع الإلكتروني عملية الضغط والتفريغ بنفسه.
التأثير في كفاءة مساحة التخزين
إذا قلّل الضغط حجم الملف إلى ما دون حجم صفحة LevelDB، تتم إعادة نقل البيانات إلى LevelDB. لا يؤدي هذا التغيير إلى توفير المساحة فحسب، بل يقلل أيضًا من عمليات إدخال/إخراج القرص، ما يؤدي إلى تحسين الأداء العام.
خوارزمية الضغط Snappy
اختار فريق Chrome تنسيق Snappy للضغط لأنّه يُحسِّن السرعة بدلاً من الحد الأقصى للضغط. وهي سريعة بما يكفي بحيث لا تؤدي إلى أي انخفاض ملحوظ في الأداء أثناء الضغط أو فك الضغط.
تحسينات الأداء
يتم التعامل مع الضغط والضغط الارتجاعي ضمن عملية عرض المحتوى، وهي جزء من بنية عمليات Chrome المتعددة. ويؤدي ذلك إلى تقليل حجم الرسائل المُرسَلة إلى عملية المتصفّح، ما يؤدي إلى مزيد من تحسينات الأداء. أظهرت الاختبارات القياسية الاصطناعية أنّ هذا التعديل يمكن أن يجعل بعض العمليات أسرع من ذي قبل بمقدار مرّتين أو ثلاث مرّات بسبب انخفاض سرعة الاتصالات بين العمليات (IPC) وعمليات الإدخال/الإخراج على القرص. في الممارسة العملية، وفقًا لقياسات فريق Chrome، يتم إرسال حِزم بيانات منظَّمة بحجم 1 ميغابايت من القرص إلى الصفحة في ربع الوقت تقريبًا (مع اختلاف كبير استنادًا إلى أجهزة الجهاز ونشاط النظام).
تأثير ذلك على المطوّرين والمستخدمين
ونحن نحرص على أن تكون هذه التغييرات شفافة تمامًا لكل من المطوّرين والمستخدمين. ومع ذلك، قد يلاحظ المستخدمون تحسُّنًا في الأداء وانخفاضًا في استخدام مساحة التخزين.
- توفير المساحة: لا يتم تطبيق الضغط إلا على البيانات الجديدة المخزّنة بعد هذا التعديل. يمكن ملاحظة المساحة التي تم توفيرها بشكل غير مباشر باستخدام واجهات برمجة تطبيقات الويب، مثل
navigator.storage.estimate()
أو في قسم التخزين في "أدوات مطوّري البرامج في Chrome" ضمن لوحة التطبيق. - اختبار الميزة: يمكن للمطوّرين اختبار هذا السلوك في الإصدارات التجريبية من Chrome (الإصدارات الأقدم من 129) من خلال تفعيل الميزة باستخدام العلامة:
--enable-features="IndexedDBCompressValuesWithSnappy"
.
يعزّز هذا التحديث كفاءة Chrome في إدارة قيم IndexedDB الكبيرة، ما يوفر مساحة ووقتًا بدون التأثير في الأداء، ما يشير إلى تحسُّن كبير في كيفية تخزين البيانات والوصول إليها في المتصفّح. ومن خلال فهم هذه التغييرات، يمكن للمطوّرين الاستفادة من الجهود المتواصلة لتحسين أداء Chrome وآليات التخزين فيه، ما يضمن تجربة استخدام أكثر سلاسة وفعالية.
الشكر والتقدير
راجع هذا المستند كلّ من إيفان ستاد وراشيل أندرو.