हर स्टोरेज एक जैसा नहीं होता: स्टोरेज बकेट की सुविधा शुरू की जा रही है

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

स्टोरेज स्टैंडर्ड से किस समस्या का समाधान होता है?

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

const persisted = await navigator.storage.persist();
if (persisted) {
  /* Storage will not be cleared except by explicit user action. */
}

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

स्टोरेज बकेट एपीआई

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

इस्तेमाल के उदाहरण

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

ईमेल ऐप्लिकेशन का इंटरफ़ेस
ईमेल ऐप्लिकेशन में इनबॉक्स और ड्राफ़्ट के लिए अलग-अलग स्टोरेज बकेट मौजूद हैं. (सिर्फ़ समझाने के मकसद से, यह ज़रूरी नहीं है कि इसमें Gmail के काम करने का तरीका दिखाया गया हो.)

Storage Buckets API का इस्तेमाल करना

नई स्टोरेज बकेट बनाना

StorageBucketManager इंटरफ़ेस पर open() तरीके का इस्तेमाल करके, एक नई स्टोरेज बकेट बनाई जा सकती है.

// Create a storage bucket for emails that are synchronized with the
// server.
const inboxBucket = await navigator.storageBuckets.open('inbox');

सेव की गई नई स्टोरेज बकेट बनाएं

स्टोरेज बकेट के सेव होने की पुष्टि करने के लिए, open() तरीके में durability और persisted विकल्प के आर्ग्युमेंट पास किए जा सकते हैं:

  • persisted यह तय करता है कि स्टोरेज बकेट को बनाए रखना है या नहीं. इसके लिए, false (डिफ़ॉल्ट) या true वैल्यू इस्तेमाल की जा सकती हैं.
  • durability, ब्राउज़र को एक हिंट देता है. इससे, ब्राउज़र को लिखने की परफ़ॉर्मेंस को कम करने में मदद मिलती है. ऐसा इसलिए किया जाता है, ताकि बिजली बंद होने पर डेटा के खोने का जोखिम कम हो. 'relaxed' (डिफ़ॉल्ट) या 'strict' को वैल्यू के तौर पर इस्तेमाल किया जा सकता है:

    • 'strict' बकेट, पावर सप्लाई न होने पर डेटा के खोने के जोखिम को कम करने की कोशिश करती है. हालांकि, इससे परफ़ॉर्मेंस पर असर पड़ सकता है. इसका मतलब है कि डेटा को सेव होने में ज़्यादा समय लग सकता है. साथ ही, इससे सिस्टम की परफ़ॉर्मेंस पर असर पड़ सकता है, बैटरी की खपत ज़्यादा हो सकती है, और स्टोरेज डिवाइस जल्दी खराब हो सकता है.
    • 'relaxed' बकेट, बिजली बंद होने पर, पिछले कुछ सेकंड में किए गए लिखे गए डेटा को "भूल" सकती हैं. इसके बदले, इन बकेट में डेटा लिखने से परफ़ॉर्मेंस बेहतर हो सकती है. साथ ही, बैटरी चार्ज होने में ज़्यादा समय लग सकता है. इससे स्टोरेज डिवाइस की लाइफ़ भी ज़्यादा हो सकती है. साथ ही, बिजली बंद होने पर, 'strict' बकेट के मुकाबले डेटा खराब होने की दर ज़्यादा नहीं होगी.
// Create a storage bucket for email drafts that only exist on the client.
const draftsBucket = await navigator.storageBuckets.open('drafts', {
  durability: 'strict', // Or `'relaxed'`.
  persisted: true, // Or `false`.
});

स्टोरेज बकेट से स्टोरेज एपीआई ऐक्सेस करना

हर स्टोरेज बकेट, स्टोरेज एपीआई से जुड़ी होती है. उदाहरण के लिए, IndexedDB, कैश मेमोरी इंटरफ़ेस या फ़ाइल इंटरफ़ेस. ये स्टोरेज एपीआई हमेशा की तरह काम करते हैं. सिर्फ़ ऐसे एंट्री पॉइंट जो StorageBucket इंटरफ़ेस से लिए गए हैं. उदाहरण के लिए, StorageBucket.indexedDB.

const inboxDb = await new Promise(resolve => {
  const request = inboxBucket.indexedDB.open('messages');
  request.onupgradeneeded = () => { /* migration code */ };
  request.onsuccess = () => resolve(request.result);
  request.onerror = () => reject(request.error);
});

DevTools में स्टोरेज बकेट को डीबग करना

ऐप्लिकेशन > स्टोरेज सेक्शन में, स्टोरेज बकेट की जांच करें.

स्टोरेज सेक्शन में, स्टोरेज बकेट ट्री को चालू करने से पहले और बाद की इमेज.

काम के संसाधन