IndexedDB उसी तरह की-वैल्यू स्टोर नहीं है जिस तरह से Local Storage है। स्थानीय भंडारण केवल तारों को संग्रहीत करता है, इसलिए स्थानीय भंडारण में एक वस्तु डालने के लिए सामान्य दृष्टिकोण JSON.stringify है:
myObject = {a: 1, b: 2, c: 3};
localStorage.setItem("uniq", JSON.stringify(myObject));
यह ऑब्जेक्ट को कुंजी के साथ खोजने के लिए ठीक है uniq
, लेकिन स्थानीय भंडारण से वापस myObject के गुणों को प्राप्त करने का एकमात्र तरीका JSON है। ऑब्जेक्ट को चेक करें और इसकी जांच करें:
var myStorageObject = JSON.parse(localStorage.getItem("uniq"));
window.alert(myStorageObject.b);
यह ठीक है अगर आपके पास केवल एक, या कुछ वस्तुएं हैं, तो स्थानीय भंडारण में। लेकिन कल्पना कीजिए कि आपके पास एक हजार वस्तुएं हैं, जिनमें से सभी के पास एक संपत्ति है b
, और आप केवल उन लोगों के साथ कुछ करना चाहते हैं जहां b==2
। स्थानीय भंडारण के साथ आपको पूरे स्टोर के माध्यम से लूप करना होगा और b
प्रत्येक आइटम की जांच करनी होगी , जो बहुत सारा बेकार प्रसंस्करण है।
IndexedDB के साथ आप मूल्य में तार के अलावा अन्य सामान स्टोर कर सकते हैं : "इसमें साधारण प्रकार जैसे DOMString और Date के साथ-साथ Object और Array इंस्टेंस शामिल हैं।" इतना ही नहीं, लेकिन आप उन वस्तुओं के गुणों पर अनुक्रमित बना सकते हैं जिन्हें आपने मूल्य में संग्रहीत किया है। इसलिए IndexedDb के साथ आप उन हजार वस्तुओं को इसमें डाल सकते हैं, लेकिन b
संपत्ति पर एक इंडेक्स बना सकते हैं और इसका उपयोग केवल उन वस्तुओं को पुनः प्राप्त करने के लिए कर सकते हैं, जहां b==2
स्टोर में हर वस्तु को स्कैन किए बिना ओवरहेड किया जाता है।
कम से कम यही विचार है। IndexedDB API बहुत सहज नहीं है।
वे उसी थ्रेड में चलते दिखाई देते हैं, जैसे कि एसिंक्स कॉल किए गए थे। यह UI को कैसे ब्लॉक नहीं करेगा?
एसिंक्रोनस बहु-थ्रेडेड के समान नहीं है, जावास्क्रिप्ट, एक नियम के रूप में, बहु-थ्रेडेड नहीं है । जेएस में आप जो भी भारी प्रोसेसिंग करते हैं वह यूआई को ब्लॉक कर देगा, यदि आप यूआई को वेब वर्कर्स को ब्लॉक करना कम से कम करना चाहते हैं ।
indexedDB एक बड़े स्टोर की अनुमति देता है। HTML5 स्टोर का आकार क्यों नहीं बढ़ाया?
क्योंकि, उचित अनुक्रमण के बिना, यह तेजी से धीमी हो जाएगी जितना बड़ा इसे मिला।