स्टोरेज कोटा को समझना

सभी ब्राउज़र, आपके वेब ऐप्लिकेशन के ऑरिजिन के लिए स्टोरेज की तय सीमा तय करते हैं. Workbox को कॉन्फ़िगर करके, रनटाइम के दौरान कैश मेमोरी में सेव किए गए डेटा को अपने-आप मिटाया जा सकता है. इससे, स्टोरेज कोटा की सीमाओं से बचने में मदद मिलती है. इन सीमाओं से, आपकी वेबसाइट की कैश मेमोरी में डेटा सेव करने की क्षमता और भरोसेमंदता पर असर पड़ सकता है.

कॉन्फ़िगरेशन के कौनसे विकल्प काम करते हैं?

कोई रूट और रनटाइम कैश मेमोरी से जुड़ी रणनीति सेट अप करते समय, workbox-expiration से ExpirationPlugin का कोई इंस्टेंस जोड़ा जा सकता है. इसे उन सेटिंग के साथ कॉन्फ़िगर किया जा सकता है जो कैश मेमोरी में सेव की जा रही ऐसेट के टाइप के हिसाब से सबसे सही हों.

उदाहरण के लिए, रनटाइम के दौरान इमेज को कैश मेमोरी में सेव करने के लिए, नीचे दिए गए कॉन्फ़िगरेशन का इस्तेमाल किया जा सकता है. इसमें, तय सीमा के साथ-साथ कोटा खत्म होने पर, अपने-आप क्लीनअप होने की सुविधा भी शामिल है:

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
      })
    ]
  })
);

ExpirationPlugin का इस्तेमाल करते समय, आपको maxEntries, maxAgeSeconds या दोनों को सेट करना होगा. purgeOnQuotaError का इस्तेमाल करना ज़रूरी नहीं है.

maxEntries

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

आम तौर पर, यह सेट करना अच्छा होता है. हालांकि, ऐसा तब नहीं किया जाना चाहिए, जब आपको पता हो कि किसी रणनीति से सिर्फ़ कुछ यूआरएल मैनेज किए जा सकते हैं.

maxAgeSeconds

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

यह maxEntries के तौर पर स्टोरेज कोटा को मैनेज करने में उतना असरदार नहीं है, क्योंकि जब तक सभी एंट्री कम समय में जोड़ी जाती हैं, तब तक आपके कैश मेमोरी का साइज़ बहुत ज़्यादा हो सकता है. यह तब सबसे ज़्यादा काम का होता है, जब आपको यह पता हो कि डेटा को अपडेट करने की कोई समयसीमा तय करनी है और आपके वेब ऐप्लिकेशन के लिए पुरानी एंट्री का कोई फ़ायदा नहीं है.

purgeOnQuotaError

इस विकल्प की मदद से, किसी कैश मेमोरी को 'सुरक्षित' के तौर पर मार्क किया जा सकता है. इससे, आपके वेब ऐप्लिकेशन के स्टोरेज के भर जाने पर, कैश मेमोरी अपने-आप मिट जाएगी.

फ़िलहाल, यह विकल्प डिफ़ॉल्ट रूप से false पर सेट है. आम तौर पर, रनटाइम कैश मेमोरी को मिटाने पर उसे किसी तरह का नुकसान नहीं होना चाहिए. इसलिए, इस विकल्प को true पर सेट करना अच्छा रहता है. साथ ही, इससे यह पक्का करने में मदद मिलती है कि स्टोरेज कम होने पर आपका वेब ऐप्लिकेशन अपने-आप रिकवर हो जाए.

आपको कितना डेटा सेव करने की अनुमति है?

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

कुछ ब्राउज़र, navigator.storage.estimate() की मदद से, स्टोरेज की तय सीमा के साथ-साथ, आपके ऑरिजिन के स्टोरेज के इस्तेमाल की अनुमानित जानकारी पाने के लिए इंटरफ़ेस दिखाते हैं. "उपलब्ध स्टोरेज स्पेस का अनुमान लगाना" लेख में, इस बारे में ज़्यादा जानकारी दी गई है कि अपने वेब ऐप्लिकेशन में इसका इस्तेमाल कैसे किया जा सकता है.

Chrome के गुप्त मोड से जुड़ी खास बातें

किसी वेब ऐप्लिकेशन को Chrome के गुप्त मोड में खोलने पर, डिवाइस के स्टोरेज पर खास पाबंदी लग जाती है. यह सामान्य ब्राउज़िंग के लिए लागू नहीं होती है: आपके डिवाइस में खाली जगह चाहे जो भी हो, स्टोरेज की सीमा करीब 100 मेगाबाइट होती है.

ऐसे जवाबों से सावधान रहें जो साफ़ तौर पर न बताएं!

अस्पष्ट जवाबों को रनटाइम कैश मेमोरी में सेव करने की वजह से, कोटा का ज़्यादा इस्तेमाल होता है. इसका मतलब है कि सीओआरएस की सुविधा चालू किए बिना किए गए अनुरोधों के लिए, क्रॉस-ऑरिजिन जवाब सेव किए जाते हैं.

सुरक्षा को ध्यान में रखते हुए, ब्राउज़र उन ओपेक जवाबों के कोटा के असर को अपने-आप बढ़ा देते हैं. उदाहरण के लिए, Chrome में कुछ किलोबाइट का अस्पष्ट रिस्पॉन्स भी आपके कोटा के इस्तेमाल में लगभग सात मेगाबाइट का योगदान देगा.

अस्पष्ट जवाबों को कैश मेमोरी में सेव करने पर, आपके कोटा का ज़्यादा इस्तेमाल हो सकता है. इसलिए, maxEntries के साथ ExpirationPlugin का इस्तेमाल करना सबसे अच्छा तरीका है. साथ ही, purgeOnQuotaError का इस्तेमाल भी किया जा सकता है. हालांकि, इसके लिए ज़रूरी है कि purgeOnQuotaError को सही तरीके से कॉन्फ़िगर किया गया हो.