HTML5 ऑफ़लाइन मेमोरी प्रबंधित करना

HTML5 में कई स्टोरेज एपीआई शामिल किए गए हैं. इनकी मदद से, उपयोगकर्ताओं के ब्राउज़र में बड़ी संख्या में डेटा को स्थानीय तौर पर सेव किया जा सकता है. हालांकि, हर ऐप्लिकेशन के लिए तय की गई जगह, डिफ़ॉल्ट रूप से कुछ मेगाबाइट तक सीमित होती है. Google Chrome आपको सिर्फ़ 5 एमबी की पिछली सीमा से ज़्यादा स्टोरेज कोटा का अनुरोध करने की सुविधा देता है.

इस दस्तावेज़ में, आपको Chrome में इस्तेमाल होने वाले स्टोरेज के टाइप से जुड़ी बुनियादी बातों के बारे में बताया गया है. साथ ही, प्रयोग के तौर पर उपलब्ध कोटा मैनेजमेंट एपीआई के बारे में भी बताया गया है, जिससे स्टोरेज कोटा मैनेज किया जा सकता है. दस्तावेज़ में यह माना गया है कि आपको क्लाइंट-साइड स्टोरेज के सामान्य सिद्धांतों के बारे में पहले से पता है. साथ ही, आपको ऑफ़लाइन एपीआई इस्तेमाल करने का तरीका पता है.

विषय सूची

  1. अलग-अलग तरह का स्टोरेज
    1. अस्थायी रीडायरेक्ट
    2. नियमित
    3. अनलिमिटेड
    4. अलग-अलग तरह के स्टोरेज की तुलना करना
  2. कोटा मैनेज करना
    1. क्वेरी स्टोरेज का इस्तेमाल और उपलब्धता
    2. ज़्यादा स्टोरेज का अनुरोध करें
    3. टेस्टिंग के लिए कोटा रीसेट करें
  3. एपीआई का रेफ़रंस
    1. कॉन्सटेंट
    2. तरीका की खास जानकारी
    3. तरीके
  4. आने वाले समय में होने वाले डेवलपमेंट

स्टोरेज के टाइप

Google Chrome में, आप तीन प्रकार का मेमोरी मांग सकते हैं:

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

अस्थायी स्टोरेज

अस्थायी स्टोरेज, कुछ समय के लिए होने वाला ऐसा स्टोरेज है जो किसी भी वेब ऐप्लिकेशन के लिए उपलब्ध होता है. Chrome अपने-आप आपके ऐप्लिकेशन को कुछ समय के लिए स्टोरेज देता है, इसलिए आपको स्टोरेज असाइन करने का अनुरोध करने की ज़रूरत नहीं है.

पूल शेयर करना

अस्थायी स्टोरेज, ब्राउज़र में चल रहे सभी वेब ऐप्लिकेशन के बीच शेयर किया जाता है. शेयर किया गया पूल, उपलब्ध डिस्क स्टोरेज के 1/3 तक हो सकता है. शेयर किए गए पूल के कैलकुलेशन में, ऐप्लिकेशन पहले से इस्तेमाल किए जा रहे स्टोरेज को शामिल करते हैं. इसका मतलब है कि यह कैलकुलेशन (available storage space + storage being used by apps) * .333 के आधार पर किया जाता है.

हर ऐप्लिकेशन में, शेयर किए गए पूल का 20% तक हिस्सा हो सकता है. उदाहरण के लिए, अगर डिस्क में कुल 60 जीबी स्टोरेज है, तो शेयर किए गए पूल 20 जीबी और ऐप्लिकेशन में 4 जीबी तक स्टोरेज हो सकता है. इसका हिसाब, डिस्क के उपलब्ध स्टोरेज के 1/3 (20 जीबी तक) (60 जीबी) के 20% (4 जीबी तक) से लगाया जाता है.

ज़्यादा जगह की मांग की जा रही है

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

स्टोरेज खत्म हो रहा है

पूरे पूल के लिए स्टोरेज कोटा खत्म हो जाने पर, सबसे कम हाल ही में इस्तेमाल किए गए होस्ट के लिए सेव किया गया पूरा डेटा मिटा दिया जाता है. हालांकि, ब्राउज़र LocalStorage और SessionStorage में मौजूद डेटा को नहीं मिटाएगा. दूसरे ऑफ़लाइन एपीआई में सेव किए गए डेटा के लिए, ब्राउज़र पूरे डेटा को मिटा देता है और उसका कोई हिस्सा नहीं मिटा देता. इससे ऐप्लिकेशन का डेटा अनचाहे तरीकों से खराब नहीं होता है.

हर ऐप्लिकेशन को स्टोरेज पूल के 20% से ज़्यादा हिस्से तक ही मिटाया जा सकता है. ऐसे में, सिर्फ़ तब डेटा मिटाने की संभावना होती है, जब उपयोगकर्ता पांच से ज़्यादा ऐसे ऑफ़लाइन ऐप्लिकेशन चला रहा हो जिनमें से हर ऐप्लिकेशन ज़्यादा से ज़्यादा स्टोरेज का इस्तेमाल कर रहा हो.

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

स्थायी जगह

स्थायी मेमोरी वह मेमोरी है जो ब्राउज़र में तब तक रहती है, जब तक उपयोगकर्ता उसे मिटा नहीं देता. यह सिर्फ़ उन ऐप्लिकेशन के लिए उपलब्ध है जो फ़ाइल सिस्टम एपीआई का इस्तेमाल करते हैं, लेकिन बाद में यह IndexedDB और ऐप्लिकेशन कैश जैसे दूसरे ऑफ़लाइन एपीआई को भी उपलब्ध होगा.

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

अनलिमिटेड स्टोरेज

अनलिमिटेड स्टोरेज, स्थायी स्टोरेज की तरह ही होता है. हालांकि, यह सिर्फ़ Chrome ऐप्लिकेशन और एक्सटेंशन (.crx फ़ाइलों) के लिए उपलब्ध होता है. अनलिमिटेड स्टोरेज का साइज़, उपयोगकर्ता की हार्ड ड्राइव में स्टोरेज की उपलब्धता पर निर्भर करता है. किसी ऐप्लिकेशन या एक्सटेंशन के लिए, मेनिफ़ेस्ट फ़ाइल में unlimitedStorage की अनुमति मांगी जा सकती है. इंस्टॉल करते समय, उपयोगकर्ता को ऐप्लिकेशन या एक्सटेंशन के लिए ज़रूरी अनुमतियों के बारे में सूचना दी जाती है. इंस्टॉल करने की प्रोसेस शुरू करने पर, उपयोगकर्ता साफ़ तौर पर उन सभी पेजों को अनुमति देता है जिनके यूआरएल, Manifest.json फ़ाइल में शामिल होते हैं.

ज़्यादा जानने के लिए, ऐप्लिकेशन और एक्सटेंशन से जुड़ी डेवलपर गाइड देखें.

स्टोरेज टाइप की तुलना करना

यहां दी गई टेबल में, तीनों तरह के स्टोरेज के बीच के अंतर के बारे में बताया गया है.

 अस्थायी स्टोरेजस्थायी जगहअनलिमिटेड स्टोरेज
सामान्य जानकारी

कुछ समय के लिए मिलने वाला स्टोरेज, जो किसी भी वेब ऐप्लिकेशन के लिए उपलब्ध होता है.

यह अपने-आप होता है और इसके लिए अनुरोध करने की ज़रूरत नहीं है.

स्थायी स्टोरेज के लिए, कोटा मैनेजमेंट एपीआई की मदद से अनुरोध किया जाना चाहिए और उपयोगकर्ताओं की मंज़ूरी मिलनी चाहिए.

Chrome एक्सटेंशन और ऐप्लिकेशन के लिए स्थायी स्टोरेज.

इसे मेनिफ़ेस्ट फ़ाइल में सेट किया गया है और यह ज़रूरी है कि उपयोगकर्ताओं को इसकी अनुमति दी जाए.

उपलब्धता

सभी वेब ऐप्लिकेशन.

सभी वेब ऐप्लिकेशन.Chrome एक्सटेंशन के साथ-साथ होस्ट और इंस्टॉल किए गए वेब ऐप्लिकेशन के लिए खास.
अनुमतिकोई नहीं. आप इसे इस्तेमाल करने के लिए साफ़ तौर पर अनुरोध नहीं कर सकते.

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

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

Chrome एक जानकारी बार दिखाता है, जिसमें उपयोगकर्ता को स्टोरेज के अनुरोध को स्वीकार या अस्वीकार करने का निर्देश दिया जाता है.

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

इंस्टॉल करते समय, उपयोगकर्ता को ऐप्लिकेशन या एक्सटेंशन के लिए ज़रूरी अनुमतियों के बारे में सूचना दी जाती है. इंस्टॉल करने की प्रोसेस शुरू करने पर, उपयोगकर्ता उन सभी पेजों को साफ़ तौर पर अनुमति देता है जिनके यूआरएल ऐप्लिकेशन या एक्सटेंशन के लिए, Manifest.json फ़ाइल में शामिल हों.

स्टोरेज बढ़ाने के लिए बाद में किए जाने वाले अनुरोधों पर उपयोगकर्ता अनुभवलागू नहीं. इससे ज़्यादा अस्थायी स्टोरेज का अनुरोध नहीं किया जा सकता.

Chrome, उपयोगकर्ता को फिर से प्रॉम्प्ट देता है.

 

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

थोड़े समय के लिए. ब्राउज़र डेटा को मिटा सकता है.

लगातार टैप करें. ब्राउज़र तब तक डेटा नहीं मिटाता है, जब तक उपयोगकर्ता ऐसा करने के लिए कहे. डेटा को बाद में ऐक्सेस किया जा सकता है.

यह न मानें कि डेटा स्थायी है, क्योंकि उपयोगकर्ता उसे हटा सकता है.

स्थायी स्टोरेज की तरह.

 

स्टोरेज के लिए डिफ़ॉल्ट जगह

शेयर किए जा सकने वाले पूल का 20% तक हिस्सा.

0 एमबी. आपको साफ़ तौर पर, स्टोरेज के लिए बची जगह के बारे में पूछना होगा.

0 एमबी. मेनिफ़ेस्ट फ़ाइल में, आपको साफ़ तौर पर unlimitedStorage के बारे में पूछना होगा.

अगर आपने स्टोरेज के लिए ज़रूरी शर्तें तय नहीं की हैं, तो Chrome, शेयर किए गए स्टोरेज से ऐप्लिकेशन को स्टोरेज देता है.

स्टोरेज के लिए ज़्यादा से ज़्यादा जगहशेयर किए जा सकने वाले पूल का 20% तक हिस्सा.हार्ड ड्राइव पर उपलब्ध जगह के बराबर. इसमें स्टोरेज का कोई तय पूल नहीं है.हार्ड ड्राइव पर उपलब्ध जगह के बराबर.
इस्तेमाल के लिए सुझाया गया उदाहरणकैश मेमोरी में सेव करना.ऐसे ऐप्लिकेशन जो ऑफ़लाइन काम करते हैं या जिनमें एसेट की संख्या ज़्यादा होती है.ऐसे ऐप्लिकेशन जिन्हें Google Chrome में चलने के लिए डिज़ाइन किया गया है.
ऐसे एपीआई जो इसका इस्तेमाल कर सकते हैं

ऑफ़लाइन एपीआई

ध्यान दें: LocalStorage और SessionStorage जैसे वेब स्टोरेज एपीआई, 5 एमबी पर स्थिर रहते हैं.

फ़ाइल सिस्टम एपीआई

ऑफ़लाइन एपीआई

  • ऐप्लिकेशन कैश
  • फ़ाइल सिस्टम
  • IndexedDB
  • WebSQL (अब सेवा में नहीं है)

ध्यान दें: LocalStorage और SessionStorage जैसे वेब स्टोरेज एपीआई, 5 एमबी पर स्थिर रहते हैं.

अपना कोटा मैनेज करना

कोटा मैनेजमेंट एपीआई, Chrome 13 में लॉन्च किया गया था. इसकी मदद से, ये काम किए जा सकते हैं:

इस एपीआई को ग्लोबल ऑब्जेक्ट window.webkitStorageInfo के साथ लागू किया गया है.

रेफ़रंस दस्तावेज़ के लिए, अगला सेक्शन देखें.

स्टोरेज के इस्तेमाल और उपलब्धता के बारे में क्वेरी करना

इस्तेमाल किए जा रहे स्टोरेज के साइज़ और होस्ट के लिए उपलब्ध जगह के बारे में क्वेरी करने के लिए, queryUsageAndQuota() को इन चीज़ों के साथ कॉल करें:

  • आपको किस तरह के स्टोरेज की जांच करनी है
  • कॉलबैक हो गया

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

यहां दिया गया कोड स्निपेट दिखाता है कि स्टोरेज के लिए बची जगह के बारे में कैसे पूछा जा सकता है:

// Request storage usage and capacity left
// Choose either Temporary or Persistent
navigator.webkitTemporaryStorage.queryUsageAndQuota (
    function(usedBytes, grantedBytes) {
        console.log('we are using ', usedBytes, ' of ', grantedBytes, 'bytes');
    },
    function(e) { console.log('Error', e);  }
);

अगर आपको स्थायी स्टोरेज की स्थिति के बारे में जानना है, तो webkitStorageInfo.TEMPORARY को webkitStorageInfo.PERSISTENT से बदलें. Enum, window ऑब्जेक्ट (ग्लोबल नेमस्पेस) में भी होता है. इसलिए, window.PERSISTENT और window.TEMPORARY का भी इस्तेमाल किया जा सकता है.

ज़्यादा स्टोरेज की मांग की जा रही है

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

File System API के स्थायी स्टोरेज के लिए, डिफ़ॉल्ट कोटे की संख्या 0 होती है. इसलिए, आपको ऐप्लिकेशन के स्टोरेज के लिए साफ़ तौर पर अनुरोध करना होगा. requestQuota() को इन चीज़ों के साथ कॉल करें:

  • स्टोरेज का टाइप
  • साइज़
  • कॉलबैक हो गया

आपने जो अनुरोध किया है उसके आधार पर, ये चीज़ें होती हैं:

  • अगर कोटे की सीमा बढ़ाने के लिए कहा जाता है, तो ब्राउज़र उपयोगकर्ता को एक जानकारी बार दिखाता है. साथ ही, उनसे यह अनुरोध करता है कि वे कोटा बढ़ाने के लिए, अनुमति दें या न दें. कुछ मामलों में, हो सकता है कि अनुरोध बिना किसी कार्रवाई के अस्वीकार कर दिया जाए और मौजूदा कोटा या कम कोटा वापस आ जाए.
  • अगर कोटा की सीमा, ऐप्लिकेशन के मौजूदा आवंटन से कम है, तो कोई सूचना नहीं दिखेगी.
  • तय सीमा से ज़्यादा स्टोरेज का अनुरोध करने पर, आपको गड़बड़ी का मैसेज (QUOTA_EXCEEDED_ERR) मिलेगा.
  • अगर उपयोगकर्ता के अनुमति देने के बाद, requestQuota() को फिर से कॉल किया जाता है, तो कुछ नहीं होगा. इसलिए, मेथड को दोबारा कॉल न करें.

यहां बताया गया है कि ज़्यादा स्टोरेज का अनुरोध कैसे किया जा सकता है:

// Request Quota (only for File System API)
var requestedBytes = 1024*1024*10; // 10MB

navigator.webkitPersistentStorage.requestQuota (
    requestedBytes, function(grantedBytes) {
        window.requestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler);

    }, function(e) { console.log('Error', e); }
);
});

जांच के लिए कोटा रीसेट किया जा रहा है

अपने ऐप्लिकेशन के स्टोरेज की जांच करते समय, हो सकता है कि आप सेव किए गए डेटा को मिटाना चाहें, ताकि आप अपने ऐप्लिकेशन में कोटा मैनेजमेंट की नए तरीके से जांच कर सकें. ऐसा करने के लिए:

  1. खोज वाली पट्टी (पता बार) में chrome://settings/cookies डालें.
  2. अपना ऐप्लिकेशन खोजें.
  3. अपना ऐप्लिकेशन चुनें.
  4. हाइलाइट किए गए चुने गए हिस्से की दाईं ओर मौजूद, X पर क्लिक करें.

एपीआई का संदर्भ

इस सेक्शन में, QUOTA Management API के तरीके बताए गए हैं.

स्थिरांक

ये webkitStorageInfo कॉन्सटेंट हैं, जिनसे स्टोरेज के टाइप के बारे में पता चलता है.

स्थिरवैल्यूब्यौरा
TEMPORARY0अस्थायी स्टोरेज.
PERSISTENT1स्थायी जगह.

तरीके की खास जानकारी

queryUsageAndQuota
requestQuota

तरीके

queryUsageAndQuota

इस्तेमाल किए जा रहे स्टोरेज के साइज़ और होस्ट के लिए उपलब्ध जगह देखें.

 // you could also use it from webkitPersistentStorage
navigator.webkitTemporaryStorage.queryUsageAndQuota(
      successCallback,
      errorCallback);
  • successCallback: दो पैरामीटर के साथ वैकल्पिक कॉलबैक:

    • ऐप्लिकेशन में इस्तेमाल किए जा रहे बाइट की मौजूदा संख्या.
    • कोटा में बचे बाइट की संख्या.
  • errorCallback: वैकल्पिक गड़बड़ी कॉलबैक.

requestQuota

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

 // you could also use it from webkitTemporaryStorage
navigator.webkitPersistentStorage.requestQuota (
      newQuotaInBytes,
      quotaCallback,
      errorCallback);
पैरामीटर
  • newQuotaInBytes: जितने बाइट आपको स्टोरेज कोटा में चाहिए.
  • successCallback: वैकल्पिक कॉलबैक, जो दी गई बाइट की संख्या पास कर लेता है.
  • errorCallback: वैकल्पिक गड़बड़ी कॉलबैक.

फ़्यूचर डेवलपमेंट

योजना है कि सभी HTML5 ऑफ़लाइन स्टोरेज एपीआई को कोटा मैनेजमेंट एपीआई के तहत रखा जाए. इनमें IndexedDB, ऐप्लिकेशन कैश, फ़ाइल सिस्टम, और शायद बताए गए अन्य एपीआई शामिल हैं. इस प्लान का इस्तेमाल करके, अपने बजट में तय किए गए सभी स्टोरेज को मैनेज किया जा सकेगा.