स्वीकार करें कि AppCache परेशान करने वाला है और इसमें समस्याएं हैं [1, 2, 3]. इसकी एक बड़ी सीमा यह है कि मांग पर एसेट को डाइनैमिक तौर पर कैश मेमोरी में सेव नहीं किया जा सकता. इसलिए, किसी ऐप्लिकेशन को ऑफ़लाइन इस्तेमाल करने के लिए, उसे पूरी तरह से ऑफ़लाइन या पूरी तरह से ऑनलाइन इस्तेमाल करना होगा. मेनिफ़ेस्ट में मौजूद सभी चीज़ों को पहले से कैश मेमोरी में सेव किया जाता है या कुछ भी कैश मेमोरी में सेव नहीं किया जाता.
एचटीएमएल5 FileSystem API, AppCache की कमियों को दूर करने का एक बेहतरीन तरीका है. प्रोग्राम के ज़रिए, फ़ाइलों और फ़ोल्डर की हैरारकी को लोकल (सैंडबॉक्स किए गए) फ़ाइल सिस्टम में सेव किया जा सकता है. इसके बाद, ज़रूरत के हिसाब से अलग-अलग संसाधन जोड़े/अपडेट किए/हटाए जा सकते हैं. मेरे साथ काम करने वाले बोरिस स्मस ने गेम के संदर्भ में, इस तरह के ऑफ़लाइन कैश मेमोरी को मैनेज करने के लिए, एक अच्छी लाइब्रेरी भी लिखी है. इसी तरीके को किसी भी तरह के वेब ऐप्लिकेशन के साथ इस्तेमाल किया जा सकता है.
crbug.com/89271, FileSystem API के लिए एक अहम सुधार है. इससे रिलेटिव filesystem: यूआरएल पाथ आसानी से काम करते हैं.
मान लें कि मैंने फ़ाइल सिस्टम के रूट फ़ोल्डर (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">
) का रिलेटिव पाथ रखा जा सकता है, क्योंकि यह फ़ाइल सिस्टम के ऑरिजिन पर सही तरीके से रिज़ॉल्व हो जाएगा.
इस सुविधा की मदद से, किसी पेज को आसानी से डाउनलोड किया जा सकता है और उसके सभी संसाधनों को ऑफ़लाइन सेव किया जा सकता है. साथ ही, ऑनलाइन वर्शन के फ़ोल्डर स्ट्रक्चर को भी बनाए रखा जा सकता है.