वर्कबॉक्स की समयसीमा खत्म होना

आम तौर पर, कैश मेमोरी पर पाबंदियां लगाई जाती हैं. जैसे, कैश मेमोरी में आइटम कितने समय तक सेव किए जाएं या कैश मेमोरी में कितने आइटम सेव किए जाएं. Workbox, workbox-expiration प्लग इन की मदद से यह सुविधा उपलब्ध कराता है. इसकी मदद से, कैश मेमोरी में मौजूद एंट्री की संख्या को सीमित किया जा सकता है और / या लंबे समय से कैश मेमोरी में सेव की गई एंट्री को हटाया जा सकता है.

कैश मेमोरी में सेव की जाने वाली फ़ाइलों की संख्या सीमित करना

कैश मेमोरी में सेव की गई एंट्री की संख्या को सीमित करने के लिए, maxEntries विकल्प का इस्तेमाल इस तरह किया जा सकता है:

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

registerRoute(
  ({request}) => request.destination === 'image',
  new CacheFirst({
    cacheName: 'image-cache',
    plugins: [
      new ExpirationPlugin({
        maxEntries: 20,
      }),
    ],
  })
);

इससे, इस रूट में प्लग इन जोड़ दिया जाएगा. कैश मेमोरी में सेव किए गए रिस्पॉन्स का इस्तेमाल करने या कैश मेमोरी में नया अनुरोध जोड़ने के बाद, प्लग इन कॉन्फ़िगर किए गए कैश मेमोरी को देखेगा और यह पक्का करेगा कि कैश मेमोरी में सेव की गई एंट्री की संख्या तय सीमा से ज़्यादा न हो. ऐसा होने पर, सबसे पुरानी एंट्री हटा दी जाएंगी.

कैश मेमोरी में सेव की गई एंट्री की समयसीमा तय करना

किसी अनुरोध को कैश मेमोरी में सेव रखने की समयसीमा तय करने के लिए, maxAgeSeconds विकल्प का इस्तेमाल करके, सेकंड में ज़्यादा से ज़्यादा समय तय किया जा सकता है. जैसे:

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

registerRoute(
  ({request}) => request.destination === 'image',
  new CacheFirst({
    cacheName: 'image-cache',
    plugins: [
      new ExpirationPlugin({
        maxAgeSeconds: 24 * 60 * 60,
      }),
    ],
  })
);

हर अनुरोध या कैश मेमोरी अपडेट के बाद, प्लग इन एंट्री की जांच करेगा और उन्हें हटा देगा.

बेहतर इस्तेमाल के लिए

अगर आपको किसी दूसरे Workbox मॉड्यूल से अलग, एक्सपायर होने के लॉजिक का इस्तेमाल करना है, तो ऐसा CacheExpiration क्लास का इस्तेमाल करके किया जा सकता है.

किसी कैश मेमोरी पर पाबंदियां लगाने के लिए, आपको उस कैश मेमोरी के लिए CacheExpiration का एक इंस्टेंस बनाना होगा जिसे आपको कंट्रोल करना है. ऐसा करने के लिए, यह तरीका अपनाएं:

import {CacheExpiration} from 'workbox-expiration';

const cacheName = 'my-cache';
const expirationManager = new CacheExpiration(cacheName, {
  maxAgeSeconds: 24 * 60 * 60,
  maxEntries: 20,
});

कैश मेमोरी में सेव की गई किसी एंट्री को अपडेट करने पर, आपको updateTimestamp() तरीका कॉल करना होगा, ताकि उसकी उम्र अपडेट हो जाए.

await openCache.put(request, response);

await expirationManager.updateTimestamp(request.url);

इसके बाद, जब भी आपको एंट्री के किसी सेट की समयसीमा खत्म करनी हो, तो expireEntries() मेथड को कॉल करें. इससे maxAgeSeconds और maxEntries कॉन्फ़िगरेशन लागू हो जाएगा.

await expirationManager.expireEntries();

टाइप

CacheExpiration

CacheExpiration क्लास की मदद से, Cache में सेव किए गए जवाबों की समयसीमा और / या संख्या तय की जा सकती है.

प्रॉपर्टी

  • कंस्ट्रक्टर

    अमान्य

    CacheExpiration का नया इंस्टेंस बनाने के लिए, आपको कम से कम एक config प्रॉपर्टी देनी होगी.

    constructor फ़ंक्शन इस तरह दिखता है:

    (cacheName: string, config?: CacheExpirationConfig) => {...}

    • cacheName

      स्ट्रिंग

      उस कैश मेमोरी का नाम जिस पर पाबंदियां लागू करनी हैं.

    • config

      CacheExpirationConfig ज़रूरी नहीं

  • मिटाएं

    अमान्य

    कैश मेमोरी की समयसीमा खत्म होने के मेटाडेटा को ट्रैक करने के लिए इस्तेमाल किए जाने वाले IndexedDB ऑब्जेक्ट स्टोर को हटाता है.

    delete फ़ंक्शन इस तरह दिखता है:

    () => {...}

    • returns

      Promise<void>

  • expireEntries

    अमान्य

    दिए गए कैश मेमोरी और दी गई शर्तों के लिए, एंट्री की समयसीमा खत्म कर देता है.

    expireEntries फ़ंक्शन इस तरह दिखता है:

    () => {...}

    • returns

      Promise<void>

  • isURLExpired

    अमान्य

    इसका इस्तेमाल करके, यह देखा जा सकता है कि किसी यूआरएल का इस्तेमाल करने से पहले उसकी समयसीमा खत्म हो चुकी है या नहीं.

    इसके लिए, IndexedDB से लुक अप करना पड़ता है. इसलिए, यह धीमा हो सकता है.

    ध्यान दें: इस तरीके से, कैश मेमोरी में सेव की गई एंट्री नहीं हटेगी. इंडेक्स किए गए DB और कैश मेमोरी में सेव की गई एंट्री हटाने के लिए, expireEntries() को कॉल करें.

    isURLExpired फ़ंक्शन इस तरह दिखता है:

    (url: string) => {...}

    • url

      स्ट्रिंग

    • returns

      Promise<boolean>

  • updateTimestamp

    अमान्य

    दिए गए यूआरएल के लिए टाइमस्टैंप अपडेट करें. इससे यह पक्का होता है कि ज़्यादा से ज़्यादा एंट्री के आधार पर एंट्री हटाते समय, सबसे हाल ही में इस्तेमाल की गई एंट्री सही हो या समयसीमा खत्म होने पर, टाइमस्टैंप अप-टू-डेट हो.

    updateTimestamp फ़ंक्शन इस तरह दिखता है:

    (url: string) => {...}

    • url

      स्ट्रिंग

    • returns

      Promise<void>

ExpirationPlugin

इस प्लग इन का इस्तेमाल workbox-strategy में किया जा सकता है, ताकि कैश मेमोरी में सेव किए गए अनुरोधों की उम्र और / या संख्या पर नियमित तौर पर पाबंदी लगाई जा सके.

इसका इस्तेमाल सिर्फ़ उन workbox-strategy इंस्टेंस के साथ किया जा सकता है जिनमें कस्टम cacheName प्रॉपर्टी सेट की गई हो. दूसरे शब्दों में, इसका इस्तेमाल रणनीति में मौजूद उन एंट्री की समयसीमा खत्म करने के लिए नहीं किया जा सकता जो डिफ़ॉल्ट रनटाइम कैश मेमोरी के नाम का इस्तेमाल करती हैं.

जब भी कैश मेमोरी में सेव किए गए किसी रिस्पॉन्स का इस्तेमाल किया जाता है या उसे अपडेट किया जाता है, तो यह प्लग इन उससे जुड़ी कैश मेमोरी को देखेगा और किसी भी पुराने या अतिरिक्त रिस्पॉन्स को हटा देगा.

maxAgeSeconds का इस्तेमाल करने पर, जवाबों का इस्तेमाल समयसीमा खत्म होने के बाद एक बार किया जा सकता है. ऐसा इसलिए, क्योंकि कैश मेमोरी में सेव किए गए जवाब का इस्तेमाल करने के बाद ही, समयसीमा खत्म होने पर उसे हटाया जाएगा. अगर रिस्पॉन्स में "तारीख" हेडर है, तो रिस्पॉन्स के खत्म होने की जांच की जाती है. हालांकि, रिस्पॉन्स का इस्तेमाल तुरंत नहीं किया जाएगा.

maxEntries का इस्तेमाल करने पर, कैश मेमोरी से सबसे हाल ही में अनुरोध की गई एंट्री को पहले हटाया जाएगा.

प्रॉपर्टी

  • कंस्ट्रक्टर

    अमान्य

    constructor फ़ंक्शन इस तरह दिखता है:

    (config?: ExpirationPluginOptions) => {...}

  • deleteCacheAndMetadata

    अमान्य

    यह एक हेल्पर तरीका है, जो दो काम करता है:

    • यह आपके लिए caches.delete() को कॉल करके, इस प्लग इन इंस्टेंस से जुड़े सभी कैश मेमोरी इंस्टेंस को मिटा देता है.
    • IndexedDB से मेटाडेटा मिटाता है. इसका इस्तेमाल, हर कैश इंस्टेंस के लिए, खत्म होने की जानकारी को ट्रैक करने के लिए किया जाता है.

    कैश मेमोरी की समयसीमा खत्म होने की सुविधा का इस्तेमाल करते समय, सीधे caches.delete() को कॉल करने के बजाय, इस तरीके को कॉल करना बेहतर होता है. इससे यह पक्का होगा कि IndexedDB का मेटाडेटा भी पूरी तरह से हटाया गया है और खुले हुए IndexedDB इंस्टेंस मिटा दिए गए हैं.

    ध्यान दें कि अगर किसी कैश मेमोरी के लिए, कैश मेमोरी खत्म होने की सुविधा का इस्तेमाल नहीं किया जा रहा है, तो caches.delete() को कॉल करके और कैश मेमोरी का नाम डालकर काम हो जाएगा. ऐसे में, क्लीनअप के लिए Workbox के किसी खास तरीके की ज़रूरत नहीं होती.

    deleteCacheAndMetadata फ़ंक्शन इस तरह दिखता है:

    () => {...}

    • returns

      Promise<void>

ExpirationPluginOptions

प्रॉपर्टी

  • matchOptions

    CacheQueryOptions ज़रूरी नहीं

  • maxAgeSeconds

    number ज़रूरी नहीं

  • maxEntries

    number ज़रूरी नहीं

  • purgeOnQuotaError

    बूलियन ज़रूरी नहीं है