मेरे पास appcaching का उपयोग करके एक ऑफ़लाइन वेब एप्लिकेशन है। मुझे इसे लगभग 10MB - 20MB डेटा प्रदान करने की आवश्यकता है, जो मुख्य रूप से PNG छवि फ़ाइलों से मिलकर (क्लाइंट-साइड) बचाएगा। ऑपरेशन इस प्रकार है:
- वेब एप्लिकेशन डाउनलोड और appcache में स्थापित (प्रकट का उपयोग करता है)
- सर्वर PNG डेटा फ़ाइलों से वेब ऐप अनुरोध (कैसे? - नीचे विकल्प देखें)
- कभी-कभी वेब ऐप सर्वर के साथ resyncs, और PNG डेटाबेस के लिए छोटे आंशिक अद्यतन / हटा / जोड़ देता है
- FYI करें: सर्वर एक JSON REST सर्वर है, जो पिकअप के लिए wwwroot में फाइल रख सकता है
यहाँ क्लाइंट-आधारित "डेटाबेस" का मेरा वर्तमान विश्लेषण है जो बाइनरी बूँद भंडारण को संभालता है
नीचे देखें
- AppCache (प्रकट के माध्यम से सभी पीएनजी जोड़ें और फिर मांग पर अपडेट करें)
- CON: PNG डेटाबेस आइटम के किसी भी परिवर्तन का अर्थ होगा प्रकट में सभी वस्तुओं का पूर्ण डाउनलोड (वास्तव में बुरी खबर!)
- वेब भंडारण
- CON: JSON स्टोरेज के लिए डिज़ाइन किया गया
- कांग्रेस: केवल आधार 64 एन्कोडिंग के माध्यम से ब्लब्स को स्टोर कर सकता है (शायद डी-एन्कोडिंग की लागत के कारण घातक दोष)
- CON: वेबस्टोरेज के लिए 5MB की हार्ड लिमिट http://htmlui.com/blog/2011-08-23-5-obscure-facts-about-html5-localstorage.html
- PhoneGap और SQLLite
- CON: प्रायोजक इसे एक मूल एप्लिकेशन के रूप में खारिज कर देगा जिसमें प्रमाणीकरण की आवश्यकता होगी
- ज़िप फ़ाइल
- सर्वर एक ज़िप फ़ाइल बनाता है, इसे wwwroot में रखता है, और क्लाइंट को सूचित करता है
- उपयोगकर्ता को मैन्युअल रूप से अनज़िप करना होगा (कम से कम यह है कि मैं इसे कैसे देखता हूं) और क्लाइंट फ़ाइल सिस्टम को सहेजें
- वेब ऐप फाइलों को संदर्भित करने के लिए फाइलसिस्टम एपीआई का उपयोग करता है
- CON: जिप बहुत बड़ा हो सकता है (zip64?), बनाने में लंबा समय
- कांग्रेस: यकीन नहीं कि अगर फ़ाइलसिस्टम एपीआई हमेशा सैंडबॉक्स से बाहर पढ़ सकता है (मुझे ऐसा लगता है)
- यूएसबी या एसडी कार्ड (पाषाण युग में वापस ....)
- उपयोगकर्ता ऑफ़लाइन होने से पहले सर्वर के लिए स्थानीय होगा
- तो हम उसे SD कार्ड डाल सकते हैं, सर्वर को PNG फ़ाइलों के साथ भरने दें
- फिर उपयोगकर्ता इसे लैपटॉप, टैबलेट में प्लग करेगा
- फ़ाइलों को पढ़ने के लिए वेब ऐप FileSystem API का उपयोग करेगा
- कांग्रेस: यकीन नहीं कि अगर फ़ाइलसिस्टम एपीआई हमेशा सैंडबॉक्स से बाहर पढ़ सकता है (मुझे ऐसा लगता है)
- WebSQL
- कांग्रेस: w3c ने इसे छोड़ दिया है (बहुत बुरा)
- मैं एक जावास्क्रिप्ट रैपर पर विचार कर सकता हूं जो IndexedDB और WebSQL का उपयोग एक गिरावट के रूप में करता है
- फ़ाइलसिस्टम एपीआई
- Chrome बूँद के पढ़ने / लिखने का समर्थन करता है
- कांग्रेस: IE और फ़ायरफ़ॉक्स के बारे में स्पष्ट नहीं (IE10, गैर-मानक msSave है)
- caniuse.com IOS और Android समर्थन की रिपोर्ट करता है (लेकिन फिर, क्या यह JSON का सिर्फ r / w है, या इसमें लिखने के लिए पूर्ण ब्लॉब एपीआई शामिल है?
- कांग्रेस: फ़ायर्फ़ॉक्स लोग फाइलसिस्टम एपीआई को नापसंद करते हैं और यदि वे ब्लब्स को बचाने का समर्थन कर रहे हैं तो स्पष्ट नहीं है: https://hacks.mozilla.org/2012/07/why-no-filesystem-api-in-firefox/
- प्रो: jsperf के अनुसार ब्लॉब्स के लिए IndexedDB से बहुत तेज़ http://jsperf.com/indexeddb-vs-localstorage/15 (पेज 2)
- IndexedDB
- IE10 में अच्छा समर्थन, फ़ायर्फ़ॉक्स (सहेजें, बूँदें पढ़ें)
- फ़ाइल सिस्टम की तुलना में अच्छी गति और आसान प्रबंधन (हटाता है, अपडेट करता है)
- प्रो: गति परीक्षण देखें: http://jsperf.com/indexeddb-vs-localstorage/15
- IndexedDB में छवियों के भंडारण और प्रदर्शन पर यह लेख देखें: https://hacks.mozilla.org/2012/02/storing-images-and-files-in-indexeddb/
- कांग्रेस: मैंने पुष्टि की है कि क्रोम अभी तक बूँद लेखन का समर्थन नहीं करता है (वर्तमान बग, लेकिन स्पष्ट नहीं है कि यह कब तय किया जाएगा)
- अद्यतन: क्रोम डेवलपर्स पुष्टि करते हैं कि वे डेस्कटॉप और एंड्रॉइड दोनों के लिए इस पर काम कर रहे हैं! अभी तक कोई समयरेखा नहीं।
- लॉनचेयर जावास्क्रिप्ट रैपर http://brian.io/lawnchair/
- PRO: IndexedDB, WebSQL या आपके पास जो भी डेटाबेस हो उसके लिए बहुत साफ आवरण (पॉलीफ़िल सोचें)
- कांग्रेस: बाइनरी ब्लॉब्स को स्टोर नहीं किया जा सकता, केवल डेटा: उरी (बेस 64 एन्कोडिंग) (शायद डी-एन्कोडिंग की लागत के कारण घातक दोष)
- IndexedDB JQUERY पॉलीफिल https://github.com/axemclion/jquery-indexeddb
- परशुराम ने कच्चे IndexedDB इंटरफ़ेस के लिए एक अच्छा JQUERY आवरण लिखा है
- PRO: IndexedDB का उपयोग करके बहुत सरल करता है, मैं Chrome FileSystemAPI के लिए एक शिम / पॉलीफ़िल जोड़ने की उम्मीद कर रहा था
- कॉन: इसे ब्लॉब्स को संभालना चाहिए, लेकिन मैं इसे काम करने में असमर्थ था
- idb.filesystem.js http://ericbidelman.tumblr.com/post/21649963613/idb-filesystem-js-bringing-the-html5-filesystem-api
- एरिक बिडेलमैन @ गूगल ने एक अच्छी तरह से जांच की गई पॉलीफ़िल फ़ाइलस् सिस्टम एपीआई को लिखा है जो अनुक्रमित डीबी को एक गिरावट के रूप में उपयोग करता है
- प्रो: फाइलसिस्टम एपीआई स्टोरिंग ब्लब्स के लिए अच्छी तरह से अनुकूल है
- प्रो: फ़ायरफ़ॉक्स और क्रोम पर महान काम करता है
- PRO: क्लाउड आधारित CouchDB के साथ सिंक्रनाइज़ करने के लिए बहुत अच्छा है
- कांग्रेस: कोई स्पष्ट क्यों नहीं, लेकिन यह IE10 पर काम नहीं कर रहा है
- PouchDB जावास्क्रिप्ट लाइब्रेरी http://pouchdb.com/
- स्थानीय DB के साथ CouchDB सिंक करने के लिए बहुत अच्छा है (या तो WebSQL या IndexedDB का उपयोग करता है (हालांकि मेरी समस्या नहीं है)
- CON: NO CONS, PouchDB अब सभी हाल के ब्राउज़रों (IE, क्रोम, फ़ायरफ़ॉक्स, मोबाइल पर क्रोम, आदि) और साथ ही कई पुराने ब्राउज़रों के लिए बाइनरी ब्लब्स का समर्थन करता है। ऐसा तब नहीं था जब मैंने पहली बार यह पोस्ट किया था।
नोट: एक डेटा देखने के लिए: पीएनजी की uri एन्कोडिंग मैंने इस पर एक उदाहरण बनाया: http://jsbin.com/ivefak/1/it
वांछित / उपयोगी / असूचीगत विशेषताएँ
- क्लाइंट पर कोई मूल (EXE, PhoneGap, ObjectiveC, आदि) ऐप (शुद्ध वेब अनुप्रयोग)
- केवल लैपटॉप के लिए नवीनतम क्रोम, फ़ायरफ़ॉक्स, IE10 पर चलने की आवश्यकता है
- एंड्रॉइड टैबलेट (IOS भी अच्छा होगा) के लिए एक ही समाधान चाहते हैं लेकिन काम करने के लिए केवल एक ब्राउज़र की आवश्यकता होती है (FF, Chrome, आदि)
- तेजी से प्रारंभिक DB जनसंख्या
- आवश्यकता: भंडारण से वेब एप्लिकेशन द्वारा छवियों की बहुत तेज़ पुनर्प्राप्ति (DB, फ़ाइल)
- उपभोक्ताओं के लिए नहीं है। हम ब्राउज़र को प्रतिबंधित कर सकते हैं, और उपयोगकर्ता को विशेष सेटअप और कार्य करने के लिए कह सकते हैं, लेकिन चलो इसे कम से कम करें
IndexedDB कार्यान्वयन
- IE, FF और Chrome इसे आंतरिक रूप से कैसे लागू करते हैं, इस पर एक उत्कृष्ट लेख है: http://www.aaron-powell.com/web/indexeddb-storage
- संक्षेप में:
- IE इंडेक्सडीडीबी के लिए एक्सचेंज और सक्रिय निर्देशिका के समान डेटाबेस प्रारूप का उपयोग करता है
- फ़ायरफ़ॉक्स SQLite का उपयोग कर रहा है इसलिए SQL डेटाबेस में NoSQL डेटाबेस को लागू करने की तरह है
- Chrome (और WebKit) एक कुंजी / मान स्टोर का उपयोग कर रहे हैं जिसकी BigTable में विरासत है
मेरे वर्तमान परिणाम
- मैंने एक IndexedDB दृष्टिकोण का उपयोग करने के लिए चुना (और Chrome के लिए FileSystemAPI के साथ पॉलीफ़िल जब तक वे बूँद समर्थन नहीं करते हैं)
- टाइल्स लाने के लिए, मेरे पास एक दुविधा थी क्योंकि JQUERY के लोग इसे AJAX में जोड़ने के बारे में चिंतित हैं
- मैं फिल पार्सन्स द्वारा XHR2-Lib के साथ गया, जो कि JQUERY .ajax () की तरह है। https://github.com/pmp/xhr2-lib को
- 100MB डाउनलोड (IE10 4s, Chrome 6s, FireFox 7s) के लिए प्रदर्शन।
- मुझे अनुक्रमित करने के लिए किसी भी अनुक्रमित डीबीआर को ब्लब्स (लॉनचेयर, पाउचडीबी, जेकरी-इंडेक्सडब, आदि) के लिए काम नहीं मिल सका।
- मैंने अपना रैपर रोल किया, और प्रदर्शन (IE10 2s, Chrome 3s, FireFox 10s) है
- FF के साथ, मुझे लगता है कि हम एक गैर-वर्गीय भंडारण के लिए एक संबंधपरक DB (sqllite) का उपयोग करने के प्रदर्शन के मुद्दे को देख रहे हैं
- ध्यान दें, Chrome में IndexedDB की स्थिति का निरीक्षण करने के लिए बकाया डिबग टूल (डेवलपर टैब, संसाधन) हैं।
अंतिम परिणाम उत्तर के रूप में नीचे पोस्ट किए गए हैं
अपडेट करें
PouchDB अब सभी हाल के ब्राउज़रों (IE, क्रोम, फ़ायरफ़ॉक्स, मोबाइल पर क्रोम, आदि) और साथ ही कई पुराने ब्राउज़रों के लिए बाइनरी ब्लब्स का समर्थन करता है। ऐसा तब नहीं था जब मैंने पहली बार यह पोस्ट किया था।