IndexStDB से स्थानीयस्टोरेज कैसे भिन्न है?


108

HTML5 में डेटा के ऑफलाइन स्टोरेज के लिए लोकलस्टोरेज और इंडेक्सडीडीबी का उपयोग किया जाता है। उनके प्रमुख अंतर क्या हैं और कौन सी स्थितियों में बेहतर है?


16
करीबी मतदाता: जबकि मैं पूरी तरह से समझता हूं कि यह "मुख्य रूप से आधारित" (मूल संस्करण में "बनाम" कैसे मदद नहीं करता था) लग रहा था, दोनों प्रौद्योगिकियां अलग-अलग हैं और एक को दूसरे पर चुनने के उद्देश्यपूर्ण कारण हैं। उपयोगकर्ता 221287 प्रश्न के विषय में कुछ न्यूनतम पूर्व अनुसंधान कर रहा है और इससे पहले कि आप पूछते हैं, उसमें शामिल अवधारणाओं की एक बुनियादी समझ प्राप्त करना संभवतः आपको भविष्य में डाउनवोट्स और करीबी वोटों से बचाएगा।
यानिस

आप यहां विभिन्न भंडारण विकल्पों और ब्राउज़रों के बीच प्रदर्शन का परीक्षण कर सकते हैं: nolanlawson.github.io/database-comparison (नोलन लॉसन को क्रेडिट)
लुकास बस्केरोटो

जवाबों:


121

सतह पर दोनों प्रौद्योगिकियां सीधे तुलनात्मक लग सकती हैं, हालांकि यदि आप उनके साथ कुछ समय बिताते हैं तो आपको जल्द ही एहसास होगा कि वे नहीं हैं। वे एक समान लक्ष्य, ग्राहक पक्ष भंडारण प्राप्त करने के लिए डिज़ाइन किए गए थे, लेकिन वे कार्य को अलग-अलग दृष्टिकोणों से देखते हैं और विभिन्न मात्रा में डेटा के साथ सबसे अच्छा काम करते हैं।

स्थानीयस्टोरेज, या अधिक सटीक रूप से वेब स्टोरेज , कम मात्रा में डेटा के लिए डिज़ाइन किया गया था। यह अनिवार्य रूप से एक साधारण कुंजीयन एपीआई के साथ केवल कुंजी-मूल्य भंडारण का तार है। वह अंतिम भाग कुंजी है। हालाँकि उस विनिर्देश में कुछ भी नहीं है जो एक अतुल्यकालिक डोम स्टोरेज को प्रतिबंधित करता है, वर्तमान में सभी कार्यान्वयन सिंक्रोनस (यानी अवरुद्ध अनुरोध) हैं। यहां तक ​​कि अगर आपने बड़ी मात्रा में डेटा के लिए एक भोले की - मान भंडारण का उपयोग करने में कोई आपत्ति नहीं की, तो आपके ग्राहक आपके आवेदन के लोड होने का हमेशा इंतजार करेंगे।

दूसरी ओर indexedDB को काफी बड़ी मात्रा में डेटा के साथ काम करने के लिए डिज़ाइन किया गया था। सबसे पहले, सिद्धांत रूप में, यह एक तुल्यकालिक और एक अतुल्यकालिक एपीआई दोनों प्रदान करता है। व्यवहार में, हालांकि, सभी वर्तमान कार्यान्वयन अतुल्यकालिक हैं, और अनुरोध उपयोगकर्ता इंटरफ़ेस को लोड करने से नहीं रोकेंगे। इसके अतिरिक्त, indexedDB, जैसा कि नाम से पता चलता है, अनुक्रमित प्रदान करता है । आप अपने डेटाबेस पर अल्पविकसित प्रश्नों को चला सकते हैं और विशिष्ट कुंजी श्रेणियों में उनकी कुंजियों को देखकर रिकॉर्ड प्राप्त कर सकते हैं । indexedDB भी लेनदेन का समर्थन करता है , और सरल प्रकार (जैसे दिनांक) प्रदान करता है।

इस बिंदु पर, indexedDB हर स्थिति के लिए बेहतर समाधान कभी भी लग सकता है। हालाँकि, इसकी सभी विशेषताओं के लिए एक दंड है: DOM Storage की तुलना में, इसका API काफी जटिल है। indexedDB डेटाबेस अवधारणाओं के साथ एक सामान्य परिचित मानता है, जबकि वेब स्टोरेज के साथ आप सही तरीके से कूद सकते हैं। यदि आपने कभी कुकीज़ के साथ काम किया है, तो आपके पास वेब स्टोरेज के साथ काम करने में कोई समस्या नहीं होगी। इसके अलावा, सामान्य तौर पर आपको वेब संग्रहण (और अधिक कोड = अधिक बग) के समान परिणाम प्राप्त करने के लिए indexedDB में अधिक कोड लिखने की आवश्यकता होगी। इसके अलावा, ब्राउज़रों के लिए वेब संग्रहण का अनुकरण करना जो इसका समर्थन नहीं करते हैं, अपेक्षाकृत सरल है। IndexedDB के साथ, कार्य अपने समय के लायक नहीं होगा। अंत में, आपको इंडेक्सडीडीबी में गोता लगाने से पहले, आपको पहले कोटा एपीआई पर एक नज़र डालनी चाहिए ।

दिन के अंत में, यह पूरी तरह से आपके ऊपर है यदि आप अपने एप्लिकेशन में वेब स्टोरेज या इंडेक्सडीडीबी या दोनों का उपयोग करते हैं। वेब संग्रहण के लिए एक अच्छा उपयोग मामला सरल सत्र डेटा को संग्रहीत करने के लिए होगा, उदाहरण के लिए उपयोगकर्ता का नाम, और आपके वास्तविक डेटाबेस के लिए कुछ अनुरोधों को सहेजना। दूसरी ओर इंडेक्सडीडीबी की अतिरिक्त विशेषताएं, आपके एप्लिकेशन को ऑफ़लाइन काम करने के लिए आवश्यक सभी डेटा को संग्रहीत करने में आपकी सहायता कर सकती हैं।


15
इसके अलावा, IndexedDB हाल ही के ब्राउज़रों द्वारा समर्थित है : IE 10+, क्रोम 23+, फ़ायरफ़ॉक्स 10+, ओपेरा 15+ और एंड्रॉइड 4.4+।
डेविड हरकेंस

1
@yannis, क्या DOM स्टोरेज और वेब स्टोरेज के बीच कोई अंतर है?
SandroMarques

वे एक जैसे प्रतीत होते हैं। en.wikipedia.org/wiki/Web_storage
Lawliet

इसके अलावा सेवा कार्यकर्ता इंडेक्सडीडीबी का उपयोग कर सकते हैं, लेकिन स्थानीयस्टोरेज का नहीं
फैबिक

9

@yannis का उत्तर उत्कृष्ट है। बस कुछ चीजों को जोड़ना चाहते हैं।

  1. कुछ स्थितियों में, सेवा कार्यकर्ता की तरह, आप ब्लॉकिंग कोड का उपयोग नहीं कर सकते हैं, इसलिए, आप लोकलस्टोरेज का उपयोग नहीं कर सकते हैं, और इंडेक्सडीबी जैसे कुछ का उपयोग करना चाहिए।

  2. IndexedDB के लिए एपीआई जटिल और थकाऊ है (मैं "भयावह", YMMV) कहने के लिए बहुत आगे जाऊंगा। एपीआई को सरल बनाने के लिए कई "रैपर" पुस्तकालय हैं, मैं दृढ़ता से सुझाव देता हूं कि आप उन पर ध्यान दें।


फिर से लोकलस्टोरेज और ब्लॉकिंग कोड का उपयोग नहीं किया जा सकता है, क्या आप ब्लॉकिंग कोड को एक वादा के साथ लपेट नहीं सकते हैं और इसे गैर-ब्लॉक कर सकते हैं?
joedotnot

3

मेरे लिए, मैंने पाया कि मैं स्टोर कर सकते हैं धब्बे IndexedDB में जबकि localStorage में मैं तार केवल स्टोर कर सकते हैं। यह मतलब है कि IndexdDB छवियों, ऑडियो, वीडियो जैसे द्विआधारी डेटा के लिए बेहतर है। हां, हम लोकलस्टोरेज में बेस 64 में इमेज स्टोर कर सकते हैं, लेकिन ब्लब्स छोटे और तेज होंगे क्योंकि हमें इन्हें डीकोड करने की जरूरत नहीं है।

MDN से उद्धरण :

The keys and the values are always strings.

IndexedDB के बारे में :

Any objects supported by the structured clone algorithm can be stored:  
All primitive types However not symbols
Boolean object   
String object    
Date     
RegExp  The lastIndex field is not preserved.
Blob     
File     
FileList     
ArrayBuffer  
ArrayBufferView This basically means all typed arrays like Int32Array etc.
ImageData    
Array    
Object  This just includes plain objects (e.g. from object literals)
Map  
Set

क्या यह? प्रलेखन इसके बारे में क्या कहता है?
मैएल

क्षमा करें, प्रलेखन में संदर्भ जोड़े गए।
विटाली ज़डनेविच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.