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

कैश मेमोरी में आइटम को कैश मेमोरी में सेव रखने की पाबंदी लगाना आम बात है. 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 में स्टोर किए गए रिस्पॉन्स की समयसीमा खत्म होने की तारीख और / या उसकी सीमा तय की जा सकती है.

प्रॉपर्टी

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

    void

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

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

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

    • cacheName

      स्ट्रिंग

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

    • कॉन्फ़िगरेशन

      CashExpiresConfig ज़रूरी नहीं

  • मिटाएं

    void

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

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

    () => {...}

    • returns

      Promise<void>

  • expireEntries

    void

    दिए गए कैश और दिए गए मापदंड के लिए प्रविष्टियों को खत्म करता है.

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

    () => {...}

    • returns

      Promise<void>

  • isURLExpired

    void

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

    इसे IndexedDB से देखने की ज़रूरत है, इसलिए यह धीमा हो सकता है.

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

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

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

    • यूआरएल

      स्ट्रिंग

    • returns

      Promise<boolean>

  • updateTimestamp

    void

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

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

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

    • यूआरएल

      स्ट्रिंग

    • returns

      Promise<void>

ExpirationPlugin

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

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

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

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

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

प्रॉपर्टी

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

    void

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

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

  • deleteCacheAndMetadata

    void

    यह हेल्पर तरीका है, जिसमें दो कार्रवाइयां की जाती हैं:

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

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

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

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

    () => {...}

    • returns

      Promise<void>

ExpirationPluginOptions

प्रॉपर्टी

  • matchOptions

    CashQueryOptions ज़रूरी नहीं

  • maxAgeSeconds

    नंबर ज़रूरी नहीं

  • maxEntries

    नंबर ज़रूरी नहीं

  • purgeOnQuotaError

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