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

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

स्टोरेज स्टैंडर्ड से कौनसी समस्या हल होती है?

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

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

स्टोरेज को बनाए रखने के लिए कहने का यह तरीका, हो सकता है कि कुछ न हो या कुछ भी न हो. लगातार कॉन्टेंट अपलोड करने के लिए, ज़्यादा सटीक तौर पर बताने का कोई तरीका नहीं है. ये सभी एक स्टोरेज बकेट हैं.

Storage बकेट एपीआई

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

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

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

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

Storage बकेट एपीआई का इस्तेमाल करना

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

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 में स्टोरेज बकेट को डीबग करना

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

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

काम के संसाधन