التعرّف على حصة مساحة التخزين

وتفرض جميع المتصفّحات حدًا أقصى لحجم مساحة التخزين التي يُسمح لمصدر تطبيق الويب باستخدامها. يمكنك ضبط Workbox على التنظيف التلقائي للبيانات التي يخزّنها في وقت التشغيل لتجنّب القيود المفروضة على حصة التخزين التي قد تؤثر في كفاءة التخزين المؤقت وموثوقيته على موقعك الإلكتروني.

ما هي خيارات الضبط المتاحة؟

عند إعداد استراتيجية ذاكرة التخزين المؤقت للمسار ووقت التشغيل، يمكنك إضافة مثيل من ExpirationPlugin من workbox-expiration تم ضبطه باستخدام الإعدادات الأكثر ملاءمةً لنوع مواد العرض التي تخزّنها مؤقتًا.

على سبيل المثال، قد يتم استخدام الإعداد التالي للتخزين المؤقت للصور في وقت التشغيل، باستخدام كل من الحدود الصريحة والتنظيف التلقائي في حالة تجاوز الحصة:

import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {ExpirationPlugin} from 'workbox-expiration';

registerRoute(
  ({request}) => request.destination === 'image',
  // Use a cache-first strategy with the following config:
  new CacheFirst({
    // You need to provide a cache name when using expiration.
    cacheName: 'images',
    plugins: [
      new ExpirationPlugin({
        // Keep at most 50 entries.
        maxEntries: 50,
        // Don't keep any entries for more than 30 days.
        maxAgeSeconds: 30 * 24 * 60 * 60,
        // Automatically cleanup if quota is exceeded.
        purgeOnQuotaError: true
      })
    ]
  })
);

عليك ضبط maxEntries أو maxAgeSeconds أو كليهما عند استخدام ExpirationPlugin. purgeOnQuotaError اختياري.

maxEntries

ويفرض ذلك حدًا أقصى لعدد الإدخالات (أي عناوين URL الفريدة) لمخزن مؤقت معيّن.

من الأفضل عادةً ضبط هذا الخيار، ما لم تكن تعرف أنّ هناك عددًا قليلاً فقط من عناوين URL المحتمَلة التي يمكن أن تتعامل معها استراتيجية معيّنة.

maxAgeSeconds

وسيتم اعتبار الإدخالات التي تمت إضافتها إلى ذاكرة التخزين المؤقت قبل أكثر من هذا العدد من الثواني قديمة، وسيتم تنظيفها تلقائيًا في المرة التالية التي يتم فيها الوصول إلى ذاكرة التخزين المؤقت.

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

purgeOnQuotaError

يتيح لك هذا الخيار وضع علامة على ذاكرة تخزين مؤقت معيّنة تشير إلى أنها آمنة لحذفها تلقائيًا في حال تجاوز تطبيق الويب لمساحة التخزين المتاحة.

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

ما هو مقدار البيانات المسموح لك بتخزينها؟

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

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

اعتبارات خاصة بشأن "وضع التصفّح المتخفي" في Chrome

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

توخّي الحذر من الردود غير الواضحة.

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

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

يمكنك استخدام الحصة بسرعة أكبر بكثير مما تتوقّعه بعد بدء تخزين الردود غير الشفافة مؤقتًا، لذا من أفضل الممارسات استخدام ExpirationPlugin مع maxEntries، وربما purgeOnQuotaError، مع ضبطها بشكلٍ مناسب.