आम तौर पर, कैश मेमोरी पर पाबंदियां लगाई जाती हैं. जैसे, कैश मेमोरी में आइटम कितने समय तक सेव किए जाएं या कैश मेमोरी में कितने आइटम सेव किए जाएं. 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 ज़रूरी नहीं
-
returns
-
-
मिटाएं
अमान्य
कैश मेमोरी की समयसीमा खत्म होने के मेटाडेटा को ट्रैक करने के लिए इस्तेमाल किए जाने वाले 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) => {...}
-
config
ExpirationPluginOptions ज़रूरी नहीं
-
returns
-
-
deleteCacheAndMetadata
अमान्य
यह एक हेल्पर तरीका है, जो दो काम करता है:
- यह आपके लिए caches.delete() को कॉल करके, इस प्लग इन इंस्टेंस से जुड़े सभी कैश मेमोरी इंस्टेंस को मिटा देता है.
- IndexedDB से मेटाडेटा मिटाता है. इसका इस्तेमाल, हर कैश इंस्टेंस के लिए, खत्म होने की जानकारी को ट्रैक करने के लिए किया जाता है.
कैश मेमोरी की समयसीमा खत्म होने की सुविधा का इस्तेमाल करते समय, सीधे
caches.delete()
को कॉल करने के बजाय, इस तरीके को कॉल करना बेहतर होता है. इससे यह पक्का होगा कि IndexedDB का मेटाडेटा भी पूरी तरह से हटाया गया है और खुले हुए IndexedDB इंस्टेंस मिटा दिए गए हैं.ध्यान दें कि अगर किसी कैश मेमोरी के लिए, कैश मेमोरी खत्म होने की सुविधा का इस्तेमाल नहीं किया जा रहा है, तो
caches.delete()
को कॉल करके और कैश मेमोरी का नाम डालकर काम हो जाएगा. ऐसे में, क्लीनअप के लिए Workbox के किसी खास तरीके की ज़रूरत नहीं होती.deleteCacheAndMetadata
फ़ंक्शन इस तरह दिखता है:() => {...}
-
returns
Promise<void>
ExpirationPluginOptions
प्रॉपर्टी
-
matchOptions
CacheQueryOptions ज़रूरी नहीं
-
maxAgeSeconds
number ज़रूरी नहीं
-
maxEntries
number ज़रूरी नहीं
-
purgeOnQuotaError
बूलियन ज़रूरी नहीं है