हम आईफोन के लिए वेब एप्लिकेशन बना रहे हैं जो ऑफलाइन काम करते हैं। लेकिन हमें गतिशील छवियों को कैश करने में कठिनाई हो रही है। कृपया पढ़ें और मैं उदाहरण के अनुसार बिल्कुल दिखाऊंगा कि मेरा क्या मतलब है और हमने अभी तक क्या किया है।एचटीएमएल 5 आईफोन की गतिशील कैशिंग
तो उदाहरण के लिए मान लें कि हम केवल 1 पृष्ठ के साथ एक साधारण सूची एप्लिकेशन बना रहे हैं। एप्लिकेशन का एकमात्र उद्देश्य 5 आइटम सूचीबद्ध करना है, प्रत्येक आइटम जिसमें कुछ टेक्स्ट और 1 छवि है।
एप्लिकेशन में एक साधारण लोगो और कुछ अलग जावास्क्रिप्ट और सीएसएस कोड है। ये स्थैतिक संसाधन कैश मेनिफेस्ट फ़ाइल का उपयोग करके कैश किए गए हैं।
परिदृश्य 1::
2 परिदृश्य के हैं मैं ऑनलाइन हूं और मैं वेब अनुप्रयोग
खोल जब मैं सफारी में सूची आवेदन लोड इसे से बाहर 5 नई यादृच्छिक आइटम लाएगा एक डेटाबेस जिसमें 1000 आइटम हैं। ये सब एक AJAX कॉल (जेएसओएन प्रारूप) के माध्यम से सरल बैकएंड द्वारा परोसे जाते हैं।
5 आइटम युक्त संपूर्ण JSON ऑब्जेक्ट को तुरंत HTML5 स्थानीय संग्रहण में संग्रहीत किया जाता है और ऑफलाइन उपयोग के लिए कैश किया जाता है।
JSON ऑब्जेक्ट की संरचना इस तरह एक सा है:
{
"0" : {
id: "3",
text: "Some text about item #3",
image_url: "http://www.domain.com/image22341.png"
},
"1" : {
id: "23",
text: "Some text about item #23",
image_url: "http://www.domain.com/image442321.png"
},
"2" : {
id: "4",
text: "Some text about item #4",
image_url: "http://www.domain.com/image2321.png"
},
"3" : {
id: "432",
text: "Some text about item #432",
image_url: "http://www.domain.com/image2441.png"
},
"4" : {
id: "43",
text: "Some text about item #43",
image_url: "http://www.domain.com/image221.png"
}
}
आप देख सकते हैं, बहुत ही सरल, पूरे JSON ऑब्जेक्ट स्थानीय भंडारण में संग्रहित है (कि JSON में कुछ त्रुटियों हो सकता है)।
अब 5 आइटम जावास्क्रिप्ट इंजेक्शन एचटीएमएल (सीएसएस का उपयोग करके स्टाइल) का उपयोग करके प्रस्तुत किए जाते हैं, कुछ भी फैंसी नहीं है। छवि संसाधन को इंगित करने वाले टेक्स्ट और छवि टैग वाले स्पैन टैग आदि बनाए गए हैं।
ऑनलाइन मोड में, यह सब बढ़िया काम करता है।
परिदृश्य 2: मैं ऑफ़लाइन कर रहा हूँ और मैं वेब अनुप्रयोग
पृष्ठ लोड (क्योंकि यह कैश प्रकट का उपयोग कर एक स्थिर संसाधन के रूप में कैश की गई था लोगो प्रदर्शित किया जाता है), कुछ जावास्क्रिप्ट का पता लगाता है खुल हम वास्तव में ऑफ़लाइन हैं और परिणामस्वरूप आवेदन बैकएंड से संपर्क करने का प्रयास नहीं करता है। इसके बजाय यह पहले से संग्रहीत JSON ऑब्जेक्ट को स्थानीय संग्रहण से पढ़ता है और 5 आइटमों को प्रस्तुत करता है। सभी अनुमानित के रूप में।
टेक्स्ट ठीक प्रदर्शित होता है, लेकिन इस बार, छवियां प्रदर्शित नहीं होती हैं, इसका कारण सरल है, छवि टैग छवि संसाधनों को इंगित कर रहे हैं जो उपलब्ध नहीं हैं। तो यह प्रदर्शित करता है कि छोटी छवि उपलब्ध आइकन नहीं है।
अब मेरा सवाल है, क्या किसी भी तरह से उन छवि संसाधनों को कैश करने का कोई तरीका है? तो अगली बार जब हमें उनकी ज़रूरत है, तो उन्हें कैश से लाया जाता है।
यह मैं क्या कोशिश की है है:
- Base64 छवियों सांकेतिक शब्दों में बदलना और JSON के माध्यम से उन्हें आपूर्ति। यह काम करता है, यह नाटकीय रूप से लाने और प्रतिपादन समय दोनों को बढ़ाता है (हम लगभग 30 सेकंड की वृद्धि, बहुत धीमी बात कर रहे हैं)
- कुछ कैश मैनिफेस्ट हैकिंग/परीक्षण और त्रुटि ..कुछ भी है कि काम करता है नहीं पा सके (आदर्श एक नीति है 'डोमेन पर सभी संसाधनों को कैश के रूप में वे अनुरोध कर रहे हैं कि आवश्यकता है, लेकिन मेरी जानकारी के लिए इस अस्तित्व में नहीं है)
मैं सचमुच इस पर घंटे बिताए और कर सकते हैं है समाधान नहीं मिला ... क्या किसी के पास कोई सुराग है? मुझे पता है कि यह संभव है क्योंकि यदि आप आईफोन के लिए Google Mail HTML5 एप्लिकेशन देखते हैं, तो वे किसी भी तरह से अनुलग्नक को कैश कर सकते हैं और ऑफ़लाइन होने पर भी आप उन्हें पुनर्प्राप्त कर सकते हैं।
एक चीज जिसे हमने कोशिश नहीं की है वह सफारी द्वारा समर्थित SQLite डेटाबेस का उपयोग कर रहा है ... शायद मैं छवियों को एक ब्लॉब के रूप में संग्रहीत कर सकता हूं (अभी भी इसका मतलब है कि इसे फ़ीड से ला रहा है और इस प्रकार धीमा है?) और फिर किसी भी तरह जादुई रूप से स्क्रीन पर एक छवि में कनवर्ट करना .... लेकिन मुझे यह नहीं पता कि यह कैसे करें।
किसी भी मदद की सराहना की है, धन्यवाद।
आपके उत्तर के लिए धन्यवाद - आप एक अच्छे मतलब नहीं कर रहा है कि ऐसा करने का नहीं सोचा था। मैं कैनवास तत्व से परिचित हूं इसलिए मुझे इसे जल्द से जल्द करने में सक्षम होना चाहिए। अब आइए बस आईफोन पर कई कैनवास के स्वीकार्य प्रदर्शन की उम्मीद करें। मैं बाद में परिणामों के साथ यहां रिपोर्ट करूंगा। –
ive ने इस पर कुछ अन्य जानकारी के साथ अपनी पोस्ट अपडेट की। – RobertPitt
धन्यवाद, दूसरा लिंक बिल्कुल वही था जो मैं चाहता था ...ऐसा लगता है जैसे वे बेस 64 प्रतिनिधित्व उत्पन्न करके धारावाहिक कैनवास तत्व को संग्रहीत करते हैं। और कैश किए गए चित्रों को प्रदर्शित करने के लिए वे "छवि: बेस 64" द्वारा पूर्व-निर्धारित बेस 64 स्ट्रिंग (डीबी से) पर इशारा करते हुए एक छवि ऑब्जेक्ट बनाते हैं, तो यह छवि ऑब्जेक्ट कैनवास पर खींचा जाता है। आपकी मदद के लिए बहुत बहुत धन्यवाद। –