لا يتم إنشاء كل مساحة التخزين بشكل متساوٍ: التعريف بـ "حِزم مساحة التخزين"

يحدد معيار Storage واجهة برمجة تطبيقات للتخزين الدائم وتقديرات الحصص وبنية تخزين النظام الأساسي. نحن بصدد إطلاق واجهة برمجة تطبيقات للتخلص المستمر من مساحة التخزين في ظل تحديات ضغط الذاكرة أكثر قابلية للتنبؤ. تتوفّر هذه الميزة بدايةً من الإصدار 122 من Chromium.

ما هي المشكلة التي يحلها معيار التخزين؟

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

const persisted = await navigator.storage.persist();
if (persisted) {
  /* Storage will not be cleared except by explicit user action. */
}

هذه الطريقة لطلب الاحتفاظ بمساحة التخزين هي كل شيء أو لا شيء. لا توجد طريقة للتعبير عن لاحتياجات المثابرة الدقيقة. كل ذلك يمثل حزمة تخزين واحدة.

واجهة برمجة تطبيقات حزم التخزين

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

مثال على حالة الاستخدام

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

واجهة تطبيق البريد الإلكتروني
تطبيق بريد إلكتروني يتضمّن حِزم مساحة تخزين منفصلة للبريد الوارد والمسودات (لأغراض التوضيح فقط، لا يعكس هذا بالضرورة طريقة عمل Gmail.)

استخدام واجهة Storage Buckets API

إنشاء حزمة تخزين جديدة

يمكن إنشاء حزمة تخزين جديدة باستخدام الطريقة open() على StorageBucketManager. من واجهة pyplot.

// Create a storage bucket for emails that are synchronized with the
// server.
const inboxBucket = await navigator.storageBuckets.open('inbox');

إنشاء حزمة مساحة تخزين جديدة مستدامة

لضمان استمرار حزمة التخزين، يمكنك ضبط الخيارَين durability وpersisted. وسيطات إلى الطريقة open():

  • تحدِّد persisted ما إذا كان يجب الاحتفاظ بحزمة مساحة التخزين أم لا. القيم المسموح بها هي إما false (الخيار التلقائي) أو true.
  • يوفّر durability تلميحًا للمتصفّح يساعده في استبدال أداء الكتابة بـ تقليل مخاطر فقدان البيانات في حالة انقطاع التيار الكهربائي. القيم المسموح بها هي 'relaxed' (تلقائية) أو 'strict':

    • تحاول حزمتا ('strict') تقليل خطر فقدان البيانات عند تعطُّل الطاقة. قد يتم ذلك في تكلفة الأداء المنخفض، ما يعني أنّ عمليات كتابة البيانات قد تستغرق وقتًا أطول حتى تكتمل الأداء العام للنظام، وقد يستهلك مزيدًا من طاقة البطارية، وقد يؤدي إلى تلف جهاز التخزين بسرعة أكبر.
    • قد يتم "نسيان" 'relaxed' مجموعة بيانات التي تم إنجازها في الثواني القليلة الماضية، عندما فقدان الطاقة. في المقابل، قد تؤدي كتابة البيانات في هذه المجموعات إلى تحقيق أداء أفضل وقد يسمح بشحن البطارية لفترة أطول، وقد ينتج عنه مساحة تخزين أطول. عمر الجهاز. أيضًا، لن يؤدي فشل الطاقة إلى تلف البيانات بمعدل أعلى من 'strict' مجموعة بيانات
// Create a storage bucket for email drafts that only exist on the client.
const draftsBucket = await navigator.storageBuckets.open('drafts', {
  durability: 'strict', // Or `'relaxed'`.
  persisted: true, // Or `false`.
});

الوصول إلى واجهات برمجة التطبيقات لمساحة التخزين من حزمة مساحة تخزين

ترتبط كل حزمة تخزين بواجهات برمجة تطبيقات التخزين، على سبيل المثال، IndexedDB، واجهة ذاكرة التخزين المؤقت، أو واجهة الملف. تعمل واجهات برمجة تطبيقات التخزين هذه وفقًا كالمعتاد، فقط أن نقطة الدخول تأتي من واجهة StorageBucket، على سبيل المثال، StorageBucket.indexedDB

const inboxDb = await new Promise(resolve => {
  const request = inboxBucket.indexedDB.open('messages');
  request.onupgradeneeded = () => { /* migration code */ };
  request.onsuccess = () => resolve(request.result);
  request.onerror = () => reject(request.error);
});

تصحيح أخطاء حِزم التخزين في "أدوات مطوري البرامج"

فحص حِزم التخزين في شجرة مخصّصة في التطبيق > قسم مساحة التخزين.

تاريخ تفعيل شجرة حِزم التخزين وقبلها وبعدها في قسم "مساحة التخزين"

مراجع مفيدة