IndexedDB में, डेटा को सेव रखने के डिफ़ॉल्ट मोड में बदलाव

Chrome 121 से, IndexedDB में डिफ़ॉल्ट तौर पर सेव किए जाने की अवधि का मोड, strict से बदलकर relaxed हो जाएगा. यह बदलाव, परफ़ॉर्मेंस को बेहतर बनाने और Firefox और Safari जैसे अन्य मुख्य ब्राउज़र के साथ अलाइन करने के लिए किया गया है. इस ब्लॉग पोस्ट में, इस बदलाव के बारे में पूरी जानकारी दी गई है. साथ ही, यह भी बताया गया है कि वेब डेवलपर के लिए इसका क्या मतलब है.

IndexedDB के ड्यूरबिलिटी मोड

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

  • strict: यह मोड, ओएस को साफ़ तौर पर निर्देश देता है कि complete इवेंट जारी करने से पहले, डिस्क में बदलावों को फ़्लश करें.
  • relaxed यह मोड, ओएस के डिफ़ॉल्ट फ़्लश करने के तरीके पर निर्भर करता है. साथ ही, ओएस बफ़र में बदलाव होने के बाद complete इवेंट जारी करता है. आम तौर पर, ओएस बफ़र को हर दो सेकंड में फ़्लश किया जाता है.

ध्यान रखें कि strict से यह पक्का नहीं होता कि बदलाव तुरंत असल में डिस्क पर लिखे जाते हैं. जब कोई साइट put() को कॉल करती है, तब भी कुछ समय तक ऐसा हो सकता है कि बिजली बंद होने की वजह से बदलाव डिस्क में सेव न हो. इसलिए, अगली बार ऐप्लिकेशन के चलने पर, बदलाव नहीं दिखेगा.

strict ड्यूरेबिलिटी की गारंटी के मामले में, IndexedDB ट्रांज़ैक्शन complete इवेंट तब तक ट्रिगर नहीं होता, जब तक डेटा लिखा नहीं जाता. वहीं, relaxed ड्यूरेबिलिटी के मामले में, complete इवेंट ट्रिगर होने पर भी डेटा लिखे जाने की प्रोसेस जारी रहती है. (पूरी प्रोसेस के बारे में ज़्यादा जानकारी के लिए, यह एक्सप्लेनर देखें).

इसलिए, strict सिर्फ़ उन ऑपरेशंस के लिए है जहां आपको अगला काम करने से पहले, बिल्कुल यह जानना ज़रूरी है कि यह लिखा गया है. डेटा माइग्रेशन एक ऐसा उदाहरण है जहां strict के लिए, डेटा को सुरक्षित रखने की ज़रूरत होती है. एक बैकिंग स्टोर से दूसरे पर माइग्रेट करते समय, आपको पुराने फ़ॉर्मैट को तब तक मिटाना नहीं है, जब तक नया फ़ॉर्मैट लिखा नहीं जाता. इस तरह, strict ड्यूरेबिलिटी की सुविधा से माइग्रेशन रूटीन को आसानी मिलती है, जो आधे रास्ते में आ रही गड़बड़ी से ठीक हो सकता है.

डिफ़ॉल्ट रूप से, बैटरी लाइफ़ मोड में बदलाव

इस बदलाव का अहम पहलू यह है कि Chrome में readwrite लेन-देन के लिए, डिफ़ॉल्ट रूप से 'लंबे समय तक सेव रखने का मोड' चालू रहेगा. अब तक, डिफ़ॉल्ट तौर पर strict का इस्तेमाल किया जाता था. इससे, डेटा में हुए बदलावों को तुरंत डिस्क पर सेव किया जा सकता था. हालांकि, परफ़ॉर्मेंस से जुड़ी बातों और relaxed का इस्तेमाल करने वाले दूसरे बड़े ब्राउज़र के साथ अलाइन करने के लिए, Chrome भी डिफ़ॉल्ट रूप से relaxed पर स्विच करने की योजना बना रहा है.

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

  • स्पीड—असल दुनिया के उदाहरणों में, Chrome की टीम को स्पीड में तीन से 30 गुना तक की बढ़ोतरी दिखी.
  • डिस्क की लाइफ़, खास तौर पर सॉलिड स्टेट डिस्क (एसएसडी) वाले डिवाइसों के लिए.
  • बढ़ा हुआ बैटरी जीवनकाल.
  • पढ़ने की स्पीड में सुधार. IndexedDB के आर्किटेक्चर की वजह से, अक्सर लिखने के लेन-देन के पीछे पढ़ने के लेन-देन ब्लॉक हो जाते हैं. इसकी वजह से, पढ़ने की स्पीड बेहतर हो जाती है.
  • इससे पूरे डिवाइस पर अच्छा असर पड़ता है, क्योंकि डिस्क ऑपरेशन, सिस्टम का शेयर किया गया संसाधन होता है.

इंटरऑपरेबिलिटी (दूसरे सिस्टम के साथ काम करना) और साथ काम करने की क्षमता

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

वेब डेवलपर के लिए इसका क्या मतलब है?

इस बदलाव से, कोई नया एपीआई प्लैटफ़ॉर्म नहीं जोड़ा गया है. मौजूदा IndexedDB API में कोई बदलाव नहीं हुआ है. इस बदलाव का असर मुख्य रूप से readwrite लेन-देन के डिफ़ॉल्ट व्यवहार पर पड़ेगा. लेन-देन करते समय, डेटा के सेव रहने की अवधि का अपना पसंदीदा मोड चुना जा सकता है. इससे, डेटा के सेव रहने की अवधि और परफ़ॉर्मेंस को कंट्रोल किया जा सकता है. नीचे दिए गए कोड सैंपल में, विकल्पों के वैकल्पिक कलेक्शन में durability को strict पर सेट करके, पुराने व्यवहार को वापस पाने का तरीका बताया गया है.

let db;
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = (event) => {
  db = DBOpenRequest.result;
};
const transaction = db.transaction(
  ['toDoList'],
  'readwrite',
  { durability: 'strict' });

प्रॉडक्ट शिप होने से पहले, उसमें किए गए बदलावों को स्थानीय तौर पर टेस्ट करना

यह बदलाव Chrome 121 में लागू होगा. अगर आपको स्थानीय तौर पर नए व्यवहार की जांच करनी है, तो chrome://flags में #indexed-db-default-durability-relaxed फ़्लैग को टॉगल करें.

ज़्यादा जानें

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

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

आभार

इस लेख की समीक्षा एवान स्टैड और रेचल एंड्रयू ने की है.