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