HTML5 में डेटा के ऑफलाइन स्टोरेज के लिए लोकलस्टोरेज और इंडेक्सडीडीबी का उपयोग किया जाता है। उनके प्रमुख अंतर क्या हैं और कौन सी स्थितियों में बेहतर है?
HTML5 में डेटा के ऑफलाइन स्टोरेज के लिए लोकलस्टोरेज और इंडेक्सडीडीबी का उपयोग किया जाता है। उनके प्रमुख अंतर क्या हैं और कौन सी स्थितियों में बेहतर है?
जवाबों:
सतह पर दोनों प्रौद्योगिकियां सीधे तुलनात्मक लग सकती हैं, हालांकि यदि आप उनके साथ कुछ समय बिताते हैं तो आपको जल्द ही एहसास होगा कि वे नहीं हैं। वे एक समान लक्ष्य, ग्राहक पक्ष भंडारण प्राप्त करने के लिए डिज़ाइन किए गए थे, लेकिन वे कार्य को अलग-अलग दृष्टिकोणों से देखते हैं और विभिन्न मात्रा में डेटा के साथ सबसे अच्छा काम करते हैं।
स्थानीयस्टोरेज, या अधिक सटीक रूप से वेब स्टोरेज , कम मात्रा में डेटा के लिए डिज़ाइन किया गया था। यह अनिवार्य रूप से एक साधारण कुंजीयन एपीआई के साथ केवल कुंजी-मूल्य भंडारण का तार है। वह अंतिम भाग कुंजी है। हालाँकि उस विनिर्देश में कुछ भी नहीं है जो एक अतुल्यकालिक डोम स्टोरेज को प्रतिबंधित करता है, वर्तमान में सभी कार्यान्वयन सिंक्रोनस (यानी अवरुद्ध अनुरोध) हैं। यहां तक कि अगर आपने बड़ी मात्रा में डेटा के लिए एक भोले की - मान भंडारण का उपयोग करने में कोई आपत्ति नहीं की, तो आपके ग्राहक आपके आवेदन के लोड होने का हमेशा इंतजार करेंगे।
दूसरी ओर indexedDB को काफी बड़ी मात्रा में डेटा के साथ काम करने के लिए डिज़ाइन किया गया था। सबसे पहले, सिद्धांत रूप में, यह एक तुल्यकालिक और एक अतुल्यकालिक एपीआई दोनों प्रदान करता है। व्यवहार में, हालांकि, सभी वर्तमान कार्यान्वयन अतुल्यकालिक हैं, और अनुरोध उपयोगकर्ता इंटरफ़ेस को लोड करने से नहीं रोकेंगे। इसके अतिरिक्त, indexedDB, जैसा कि नाम से पता चलता है, अनुक्रमित प्रदान करता है । आप अपने डेटाबेस पर अल्पविकसित प्रश्नों को चला सकते हैं और विशिष्ट कुंजी श्रेणियों में उनकी कुंजियों को देखकर रिकॉर्ड प्राप्त कर सकते हैं । indexedDB भी लेनदेन का समर्थन करता है , और सरल प्रकार (जैसे दिनांक) प्रदान करता है।
इस बिंदु पर, indexedDB हर स्थिति के लिए बेहतर समाधान कभी भी लग सकता है। हालाँकि, इसकी सभी विशेषताओं के लिए एक दंड है: DOM Storage की तुलना में, इसका API काफी जटिल है। indexedDB डेटाबेस अवधारणाओं के साथ एक सामान्य परिचित मानता है, जबकि वेब स्टोरेज के साथ आप सही तरीके से कूद सकते हैं। यदि आपने कभी कुकीज़ के साथ काम किया है, तो आपके पास वेब स्टोरेज के साथ काम करने में कोई समस्या नहीं होगी। इसके अलावा, सामान्य तौर पर आपको वेब संग्रहण (और अधिक कोड = अधिक बग) के समान परिणाम प्राप्त करने के लिए indexedDB में अधिक कोड लिखने की आवश्यकता होगी। इसके अलावा, ब्राउज़रों के लिए वेब संग्रहण का अनुकरण करना जो इसका समर्थन नहीं करते हैं, अपेक्षाकृत सरल है। IndexedDB के साथ, कार्य अपने समय के लायक नहीं होगा। अंत में, आपको इंडेक्सडीडीबी में गोता लगाने से पहले, आपको पहले कोटा एपीआई पर एक नज़र डालनी चाहिए ।
दिन के अंत में, यह पूरी तरह से आपके ऊपर है यदि आप अपने एप्लिकेशन में वेब स्टोरेज या इंडेक्सडीडीबी या दोनों का उपयोग करते हैं। वेब संग्रहण के लिए एक अच्छा उपयोग मामला सरल सत्र डेटा को संग्रहीत करने के लिए होगा, उदाहरण के लिए उपयोगकर्ता का नाम, और आपके वास्तविक डेटाबेस के लिए कुछ अनुरोधों को सहेजना। दूसरी ओर इंडेक्सडीडीबी की अतिरिक्त विशेषताएं, आपके एप्लिकेशन को ऑफ़लाइन काम करने के लिए आवश्यक सभी डेटा को संग्रहीत करने में आपकी सहायता कर सकती हैं।
@yannis का उत्तर उत्कृष्ट है। बस कुछ चीजों को जोड़ना चाहते हैं।
कुछ स्थितियों में, सेवा कार्यकर्ता की तरह, आप ब्लॉकिंग कोड का उपयोग नहीं कर सकते हैं, इसलिए, आप लोकलस्टोरेज का उपयोग नहीं कर सकते हैं, और इंडेक्सडीबी जैसे कुछ का उपयोग करना चाहिए।
IndexedDB के लिए एपीआई जटिल और थकाऊ है (मैं "भयावह", YMMV) कहने के लिए बहुत आगे जाऊंगा। एपीआई को सरल बनाने के लिए कई "रैपर" पुस्तकालय हैं, मैं दृढ़ता से सुझाव देता हूं कि आप उन पर ध्यान दें।
मेरे लिए, मैंने पाया कि मैं स्टोर कर सकते हैं धब्बे IndexedDB में जबकि localStorage में मैं तार केवल स्टोर कर सकते हैं। यह मतलब है कि IndexdDB छवियों, ऑडियो, वीडियो जैसे द्विआधारी डेटा के लिए बेहतर है। हां, हम लोकलस्टोरेज में बेस 64 में इमेज स्टोर कर सकते हैं, लेकिन ब्लब्स छोटे और तेज होंगे क्योंकि हमें इन्हें डीकोड करने की जरूरत नहीं है।
MDN से उद्धरण :
The keys and the values are always strings.
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