यह कोई समस्या नहीं है और इसमें कुछ समस्याएं हैं [1, 2, 3]. एक बड़ी सीमा यह है कि मांग पर ऐसेट को डाइनैमिक तौर पर कैश मेमोरी में सेव नहीं किया जा सकता. असल में, जब बात किसी ऐप्लिकेशन को ऑफ़लाइन ले जाने की आती है, तो उसके लिए यह सब कुछ होता है या कुछ भी नहीं होता है. मेनिफ़ेस्ट में मौजूद सभी चीज़ों को पहले से कैश मेमोरी में सेव किया जाता है या कैश मेमोरी में सेव नहीं किया जाता है.
HTML5 FileSystem API, Appcache की कमियों के लिए एक आकर्षक समाधान बन जाता है. प्रोग्राम बनाकर, लोकल (सैंडबॉक्स किए गए) फ़ाइल सिस्टम में फ़ाइलें और फ़ोल्डर की हैरारकी स्टोर की जा सकती है. साथ ही, ज़रूरत के हिसाब से अलग-अलग रिसॉर्स को जोड़ा/अपडेट किया जा सकता है या हटाया जा सकता है. मेरे साथी, बोरिस स्मस ने भी गेम के संदर्भ में इस तरह की ऑफ़लाइन कैश मेमोरी को मैनेज करने के लिए एक अच्छी लाइब्रेरी लिखी है. किसी भी तरह के वेब ऐप्लिकेशन के साथ काम करने के लिए यही तरीका अपनाया जा सकता है.
crbug.com/89271, FileSystem API के लिए एक अहम सुधार है, जो कि मिलते-जुलते फ़ाइल सिस्टम: यूआरएल पाथ को आकर्षक बनाता है.
उदाहरण के लिए, मान लीजिए कि मैंने फ़ाइल सिस्टम के रूट फ़ोल्डर (fs.root
) में index.html को सेव किया है, एक img फ़ोल्डर बनाया है, और इसमें "test.png" सेव किया है. इन दो फ़ाइलों के लिए filesystem:
यूआरएल filesystem:http://example.com/temporary/index.html
और filesystem:http://example.com/temporary/img/test.png
होगा. इसके बाद, अगर मुझे img.src
के लिए "test.png" का इस्तेमाल करना हो, तो मुझे इसके पूरे ऐब्सलूट पाथ का इस्तेमाल करना होगा: <img src="filesystem:http://example.com/temporary/img/test.png">
. इसका मतलब है कि index.html के लिए सभी मिलते-जुलते यूआरएल को फिर से लिख दिया जाए, ताकि संबंधित फ़ाइल के filesystem:
यूआरएल पर पहुंचा जा सके. बढ़िया नहीं है! अब इस गड़बड़ी को ठीक करके, मैं फ़ाइल (<img src="img/test.png">
) का रिलेटिव पाथ रख सकता हूं, क्योंकि उसका फ़ाइल सिस्टम ऑरिजिन से ठीक तरह से मिलान हो जाएगा.
इस सुविधा की मदद से, किसी पेज को नीचे खींचना और उसके सभी संसाधनों को ऑफ़लाइन सेव करना बेहद आसान हो जाता है. साथ ही, इसमें फ़ोल्डर का वह स्ट्रक्चर बना रहता है जो ऑनलाइन वर्शन पर आधारित होता है.