सर्विस वर्कर कैश और एचटीटीपी कैश लेयर में, एक्सपायर होने के लिए एक जैसा या अलग लॉजिक इस्तेमाल करने के फ़ायदे और नुकसान.
सर्विस वर्कर और PWA आधुनिक वेब ऐप्लिकेशन के स्टैंडर्ड बन रहे हैं. हालांकि, रिसॉर्स को कैश मेमोरी में सेव करना पहले से ज़्यादा जटिल हो गया है. इस लेख में ब्राउज़र को कैश मेमोरी में सेव करने के बारे में जानकारी दी गई है, जिसमें यह जानकारी भी शामिल है:
- सर्विस वर्कर कैश मेमोरी और एचटीटीपी कैश मेमोरी के इस्तेमाल के उदाहरण और इनके बीच अंतर.
- सामान्य एचटीटीपी कैश मेमोरी की रणनीतियों की तुलना में, अलग-अलग सर्विस वर्कर को कैश मेमोरी में सेव करने की अवधि खत्म होने की रणनीतियों के फ़ायदे और नुकसान.
कैश मेमोरी में सेव करने के फ़्लो की खास जानकारी
हाई लेवल पर, ब्राउज़र किसी संसाधन का अनुरोध करने पर कैश मेमोरी में नीचे दिए गए क्रम का पालन करता है:
- सर्विस वर्कर कैश मेमोरी: सर्विस वर्कर जांच करता है कि संसाधन कैश मेमोरी में है या नहीं. साथ ही, यह तय करता है कि प्रोग्राम की गई कैश मेमोरी की रणनीतियों के हिसाब से संसाधन को खुद वापस किया जाए या नहीं. ध्यान दें कि ऐसा अपने-आप नहीं होता है. आपको अपने सर्विस वर्कर में एक फ़ेच इवेंट हैंडलर बनाना होगा और नेटवर्क के अनुरोधों को इंटरसेप्ट करना होगा. ऐसा इसलिए, ताकि अनुरोध नेटवर्क के बजाय, सर्विस वर्कर की कैश मेमोरी से पूरे किए जा सकें.
- एचटीटीपी कैश मेमोरी (इसे ब्राउज़र की कैश मेमोरी भी कहा जाता है): अगर संसाधन एचटीटीपी कैश मेमोरी में मिलता है और उसकी समयसीमा खत्म नहीं हुई है, तो ब्राउज़र अपने-आप एचटीटीपी कैश मेमोरी से उस संसाधन का इस्तेमाल करता है.
- सर्वर साइड: अगर सर्विस वर्कर कैश मेमोरी या एचटीटीपी कैश मेमोरी में कुछ भी नहीं मिलता है, तो रिसॉर्स का अनुरोध करने के लिए ब्राउज़र नेटवर्क पर जाता है. अगर रिसॉर्स को सीडीएन में कैश मेमोरी में सेव नहीं किया गया है, तो अनुरोध को मूल सर्वर पर वापस जाना चाहिए.
लेयर कैश करना
सर्विस वर्कर को कैश मेमोरी में सेव करना
सर्विस वर्कर, नेटवर्क-टाइप के एचटीटीपी अनुरोधों को इंटरसेप्ट करता है. साथ ही, यह कैश मेमोरी में सेव करने की रणनीति का इस्तेमाल करके, यह तय करता है कि ब्राउज़र पर कौनसे संसाधन वापस किए जाने चाहिए. सर्विस वर्कर कैश और एचटीटीपी कैश, सामान्य मकसद को पूरा करते हैं, लेकिन सर्विस वर्कर कैश मेमोरी में सेव करने की ज़्यादा सुविधाएं देता है, जैसे कि कैश मेमोरी में सेव की गई चीज़ और कैश मेमोरी को कैसे कंट्रोल किया जाता है.
सर्विस वर्कर कैश मेमोरी को नियंत्रित करना
सर्विस वर्कर, इवेंट के श्रोताओं (आम तौर पर fetch
इवेंट) के साथ एचटीटीपी अनुरोधों को बीच में रोकता है. यह कोड स्निपेट कैश मेमोरी में सेव होने की सबसे पहले रणनीति का लॉजिक दिखाता है.
हमारी सलाह है कि आप वर्कबॉक्स का इस्तेमाल करें, ताकि पहिए को फिर से इस्तेमाल न किया जा सके. उदाहरण के लिए, संसाधन के यूआरएल पाथ को रेगुलर एक्सप्रेशन कोड की एक लाइन के साथ रजिस्टर किया जा सकता है.
import {registerRoute} from 'workbox-routing';
registerRoute(new RegExp('styles/.*\\.css'), callbackHandler);
सर्विस वर्कर को कैश मेमोरी में सेव करने की रणनीतियां और इस्तेमाल के उदाहरण
अगली टेबल में, सर्विस वर्कर को कैश मेमोरी में सेव करने की सामान्य रणनीतियों के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि हर रणनीति कब काम करती है.
रणनीतियाँ | नए होने की वजह | इस्तेमाल के उदाहरण |
---|---|---|
सिर्फ़ नेटवर्क | कॉन्टेंट हमेशा अप-टू-डेट रहना चाहिए. |
|
नेटवर्क का कैश मेमोरी में वापस आना | नया कॉन्टेंट दिखाने को प्राथमिकता दी जाती है. हालांकि, अगर नेटवर्क काम नहीं कर रहा है या ठीक से काम नहीं कर रहा है, तो कुछ पुराना कॉन्टेंट दिखाया जा सकता है. |
|
फिर से पुष्टि करने के दौरान पुष्टि करना | कैश मेमोरी में सेव किया गया कॉन्टेंट तुरंत इस्तेमाल किया जा सकता है. हालांकि, आने वाले समय में, अपडेट की गई कैश मेमोरी में सेव किए गए कॉन्टेंट का इस्तेमाल किया जाना चाहिए. |
|
पहले कैश मेमोरी में सेव करें, नेटवर्क पर वापस जाएं | यह कॉन्टेंट अहम नहीं है और इसे बेहतर परफ़ॉर्मेंस के लिए कैश मेमोरी से दिखाया जा सकता है. हालांकि, सर्विस वर्कर को समय-समय पर अपडेट की जांच करनी चाहिए. |
|
सिर्फ़ कैश मेमोरी | कॉन्टेंट कभी-कभार ही बदलता है. |
|
सर्विस वर्कर को कैश मेमोरी में सेव करने के अन्य फ़ायदे
कैश मेमोरी में डेटा सेव करने के लॉजिक के बेहतर कंट्रोल के अलावा, सर्विस वर्कर कैशिंग में यह डेटा भी मिलता है:
- आपके ऑरिजिन के लिए ज़्यादा मेमोरी और स्टोरेज: ब्राउज़र, हर ऑरिजिन के हिसाब से एचटीटीपी कैश मेमोरी संसाधन असाइन करता है. दूसरे शब्दों में, अगर आपके पास एक से ज़्यादा सबडोमेन हैं, तो वे सभी एक ही एचटीटीपी कैश मेमोरी शेयर करते हैं. इस बात की कोई गारंटी नहीं है कि आपके ऑरिजिन/डोमेन का कॉन्टेंट लंबे समय तक एचटीटीपी कैश में सेव रहेगा. उदाहरण के लिए, कोई उपयोगकर्ता ब्राउज़र के सेटिंग यूज़र इंटरफ़ेस (यूआई) से मैन्युअल तरीके से साफ़ करके या किसी पेज पर हार्ड-रीलोड ट्रिगर करके, कैश मेमोरी को पूरी तरह मिटा सकता है. सर्विस वर्कर कैश मेमोरी के साथ, इस बात की बहुत ज़्यादा संभावना होती है कि आपकी कैश मेमोरी में सेव किया गया कॉन्टेंट कैश मेमोरी में सेव रहेगा. ज़्यादा जानकारी के लिए, डिवाइस का स्थायी स्टोरेज सेक्शन देखें.
- अनियमित नेटवर्क या ऑफ़लाइन अनुभवों के साथ ज़्यादा सुविधाजनक: एचटीटीपी कैश के साथ आपके पास सिर्फ़ एक बाइनरी विकल्प होता है: संसाधन को कैश मेमोरी में सेव किया गया हो या नहीं. सर्विस वर्कर कैशिंग के ज़रिए आप छोटी-छोटी "हिचकों" को कम कर सकते हैं ("स्टल-टाइम-री-पुष्टि" रणनीति के साथ), एक पूरा ऑफ़लाइन अनुभव ("सिर्फ़ कैश" रणनीति के साथ) या इनके बीच में कुछ ऑफ़र करें, जैसे कस्टमाइज़ किए गए यूज़र इंटरफ़ेस (यूआई), जिसमें सर्विस वर्कर कैश से आने वाले पेज के हिस्से और बाहर रखे गए कुछ हिस्से शामिल न किए गए हों ("कैच हैंडलर सेट करें" रणनीति के साथ).
एचटीटीपी कैश मेमोरी
जब कोई ब्राउज़र पहली बार वेब पेज और उससे जुड़े रिसॉर्स को लोड करता है, तो वह इन रिसॉर्स को अपने एचटीटीपी कैश मेमोरी में सेव कर लेता है. आम तौर पर, एचटीटीपी कैश मेमोरी को ब्राउज़र अपने-आप चालू कर देते हैं. हालांकि, अगर असली उपयोगकर्ता ने इसे बंद कर दिया हो, तो ऐसा नहीं होता.
एचटीटीपी कैश मेमोरी का इस्तेमाल करने का मतलब है कि किसी रिसॉर्स को कब और कितनी देर तक कैश मेमोरी में सेव करना है, यह तय करने के लिए सर्वर पर भरोसा करना.
एचटीटीपी रिस्पॉन्स हेडर की मदद से, एचटीटीपी कैश मेमोरी की समयसीमा को कंट्रोल करें
जब कोई सर्वर किसी संसाधन के लिए ब्राउज़र अनुरोध का जवाब देता है, तो सर्वर ब्राउज़र को यह बताने के लिए एचटीटीपी रिस्पॉन्स हेडर का इस्तेमाल करता है कि उसे रिसॉर्स को कितनी देर तक कैश मेमोरी में सेव करना चाहिए. ज़्यादा जानने के लिए, रिस्पॉन्स हेडर: अपना वेब सर्वर कॉन्फ़िगर करें देखें.
एचटीटीपी कैश मेमोरी में सेव करने की रणनीतियां और इस्तेमाल के उदाहरण
एचटीटीपी कैश मेमोरी, सर्विस वर्कर को कैश मेमोरी में सेव करने से ज़्यादा आसान है, क्योंकि एचटीटीपी कैश में सिर्फ़ समय पर आधारित (टीटीएल) रिसॉर्स के खत्म होने के लॉजिक का इस्तेमाल किया जाता है. एचटीटीपी कैश मेमोरी में डेटा सेव करने की रणनीतियों के बारे में ज़्यादा जानने के लिए, आपको रिस्पॉन्स हेडर की किन वैल्यू का इस्तेमाल करना चाहिए? और खास जानकारी देखें.
कैश मेमोरी की समयसीमा खत्म होने का लॉजिक डिज़ाइन करना
इस सेक्शन में बताया गया है कि सर्विस वर्कर कैश और एचटीटीपी कैश लेयर में, एक्सपायर होने के लिए एक ही लॉजिक इस्तेमाल करने के फ़ायदे और नुकसान होते हैं. साथ ही, इन लेयर के लिए अलग-अलग समयसीमा खत्म होने के लॉजिक के फ़ायदे और नुकसान के बारे में भी बताया गया है.
नीचे दिया गया ग्लिच दिखाता है कि कैसे सर्विस वर्कर कैश मेमोरी और एचटीटीपी कैश में सेव करना अलग-अलग स्थितियों में काम करता है:
सभी कैश लेयर की समयसीमा खत्म होने का लॉजिक
इसके फ़ायदे और नुकसान के बारे में जानने के लिए, हम तीन स्थितियों पर फ़ोकस करेंगे: लंबी अवधि के, सामान्य, और कम समय वाले.
स्थितियां | लंबे समय तक कैश मेमोरी में सेव करना | मीडियम टर्म कैश मेमोरी | कम समय के लिए कैश मेमोरी |
---|---|---|---|
सर्विस वर्कर कैश मेमोरी में सेव करने की रणनीति | कैश मेमोरी, नेटवर्क पर वापस आ रहा है | पुरानी-पुष्टि के दौरान | नेटवर्क का कैश मेमोरी में डेटा कम हो रहा है |
सर्विस वर्कर कैश मेमोरी TTL | 30 दिन | 1 दिन | 10 मिनट |
एचटीटीपी कैश मेमोरी की ज़्यादा से ज़्यादा उम्र | 30 दिन | 1 दिन | 10 मिनट |
स्थिति: लंबे समय तक कैश मेमोरी में सेव करना (कैश मेमोरी, नेटवर्क पर वापस जाना)
- जब कैश मेमोरी में सेव किया गया संसाधन मान्य होता है (<= 30 दिन): सर्विस वर्कर, नेटवर्क पर जाए बिना ही कैश मेमोरी में सेव किए गए संसाधन को तुरंत लौटा देता है.
- 30 दिनों से ज़्यादा समय तक कैश मेमोरी में सेव किए गए संसाधन की समयसीमा खत्म होने पर: सर्विस वर्कर, संसाधन को फ़ेच करने के लिए नेटवर्क पर जाता है. ब्राउज़र की एचटीटीपी कैश मेमोरी में संसाधन की कॉपी नहीं है, इसलिए यह संसाधन के लिए सर्वर साइड पर जाता है.
नुकसान: इस स्थिति में, एचटीटीपी कैश मेमोरी कम मान देती है, क्योंकि सर्विस वर्कर में कैश की समयसीमा खत्म होने पर ब्राउज़र हमेशा सर्वर-साइड को अनुरोध पास करेगा.
स्थिति: मध्यम अवधि का कैशिंग (पुष्टि करते समय पुरानी जानकारी)
- जब कैश मेमोरी में सेव किया गया संसाधन मान्य होता है (<= 1 दिन): सर्विस वर्कर तुरंत, कैश मेमोरी में सेव किए गए संसाधन को लौटा देता है और संसाधन को फ़ेच करने के लिए नेटवर्क पर जाता है. ब्राउज़र की एचटीटीपी कैश मेमोरी में संसाधन की एक कॉपी होती है, ताकि यह उस कॉपी को सर्विस वर्कर को लौटा दे.
- कैश मेमोरी में सेव किए गए संसाधन की समयसीमा खत्म होने (एक दिन से ज़्यादा होने पर): सर्विस वर्कर तुरंत ही कैश मेमोरी में सेव किए गए संसाधन को लौटा देता है और संसाधन को फ़ेच करने के लिए नेटवर्क पर जाता है. ब्राउज़र की एचटीटीपी कैश मेमोरी में संसाधन की कॉपी नहीं है, इसलिए यह संसाधन को सर्वर-साइड पर फ़ेच करता है.
नुकसान: "दोबारा पुष्टि करने" के तरीके का ज़्यादा से ज़्यादा फ़ायदा पाने के लिए, सर्विस वर्कर को एचटीटीपी कैश मेमोरी को ओवरराइड करने के लिए ज़्यादा कैश-बस्टिंग की ज़रूरत होती है.
स्थिति: कम समय के लिए कैश मेमोरी (नेटवर्क डेटा फिर से कैश मेमोरी में सेव करना)
- जब कैश मेमोरी में सेव किया गया संसाधन मान्य होता है (<= 10 मिनट): तो सर्विस वर्कर, संसाधन को फ़ेच करने के लिए नेटवर्क पर जाता है. ब्राउज़र की एचटीटीपी कैश मेमोरी में संसाधन की एक कॉपी होती है, ताकि यह उसे सर्वर-साइड पर गए बिना सर्विस वर्कर को वापस भेज सके.
- जब कैश मेमोरी में सेव किए गए संसाधन की समयसीमा खत्म हो जाती है (10 मिनट से ज़्यादा): तो सर्विस वर्कर, कैश मेमोरी में सेव किए गए संसाधन को तुरंत लौटा देता है और संसाधन को फ़ेच करने के लिए नेटवर्क पर जाता है. ब्राउज़र की एचटीटीपी कैश मेमोरी में संसाधन की कॉपी नहीं है, इसलिए यह संसाधन को सर्वर-साइड पर फ़ेच करता है.
नुकसान: मीडियम टर्म कैश मेमोरी की तरह ही, सर्वर साइड से नया संसाधन फ़ेच करने के लिए सर्विस वर्कर को एचटीटीपी कैश को ओवरराइड करने के लिए अतिरिक्त कैश-बस्टिंग लॉजिक की ज़रूरत होती है.
हर तरह के मामलों में सर्विस वर्कर
सभी मामलों में, नेटवर्क के स्थिर होने पर भी, सर्विस वर्कर कैश मेमोरी में कैश मेमोरी में सेव किए गए रिसॉर्स दिखा सकता है. वहीं दूसरी ओर, नेटवर्क के स्थिर या काम न करने पर, एचटीटीपी कैश मेमोरी भरोसेमंद नहीं होती है.
सर्विस वर्कर कैश और एचटीटीपी लेयर पर, कैश मेमोरी की समयसीमा खत्म होने का अलग लॉजिक
फ़ायदे और नुकसान के बारे में बताने के लिए, हम लंबी, मध्यम, और कम समय की ज़रूरतों पर फिर से नज़र डालते हैं.
स्थितियां | लंबे समय तक कैश मेमोरी में सेव करना | मीडियम टर्म कैश मेमोरी | कम समय के लिए कैश मेमोरी |
---|---|---|---|
सर्विस वर्कर कैश मेमोरी में सेव करने की रणनीति | कैश मेमोरी, नेटवर्क पर वापस आ रहा है | पुरानी-पुष्टि के दौरान | नेटवर्क का कैश मेमोरी में डेटा कम हो रहा है |
सर्विस वर्कर कैश मेमोरी TTL | 90 दिन | 30 दिन | 1 दिन |
एचटीटीपी कैश मेमोरी की ज़्यादा से ज़्यादा उम्र | 30 दिन | 1 दिन | 10 मिनट |
स्थिति: लंबे समय तक कैश मेमोरी में सेव करना (कैश मेमोरी, नेटवर्क पर वापस जाना)
- जब कैश मेमोरी में सेव किया गया संसाधन, सर्विस वर्कर कैश मेमोरी में मान्य होता है (90 दिन से कम): सर्विस वर्कर तुरंत, कैश मेमोरी में सेव किए गए संसाधन को दिखाता है.
- सर्विस वर्कर कैश मेमोरी में कैश मेमोरी में सेव किए गए संसाधन की समयसीमा खत्म होने (90 दिनों से ज़्यादा): जब सर्विस वर्कर, संसाधन को फ़ेच करने के लिए नेटवर्क पर जाता है. ब्राउज़र की एचटीटीपी कैश मेमोरी में संसाधन की कॉपी नहीं होती. इसलिए, यह सर्वर-साइड पर जाता है.
फ़ायदे और नुकसान
- Pro: उपयोगकर्ताओं को तुरंत रिस्पॉन्स का अनुभव होता है, क्योंकि सर्विस वर्कर कैश मेमोरी में सेव किए गए रिसॉर्स तुरंत लौटा देता है.
- Pro: सर्विस वर्कर के पास इस बात का बेहतर कंट्रोल होता है कि कैश मेमोरी का इस्तेमाल कब करना है और संसाधनों के नए वर्शन का अनुरोध कब करना है.
- नुकसान: एक अच्छी तरह से तय सर्विस वर्कर कैश मेमोरी में सेव करने की रणनीति ज़रूरी है.
स्थिति: मध्य-समय तक कैश मेमोरी (दोबारा पुष्टि करते समय पुरानी)
- जब कैश किया गया कोई संसाधन सर्विस वर्कर कैश में मान्य होता है (<= 30 दिन): सर्विस वर्कर तुरंत, कैश मेमोरी में सेव किए गए संसाधन को दिखाता है.
- सर्विस वर्कर कैश मेमोरी में कैश मेमोरी में सेव किए गए संसाधन की समयसीमा खत्म होने (30 दिन से ज़्यादा): जब सर्विस वर्कर, संसाधन के लिए नेटवर्क पर जाता है. ब्राउज़र के एचटीटीपी कैश में संसाधन की कॉपी नहीं होती. इसलिए, यह सर्वर-साइड पर जाता है.
फ़ायदे और नुकसान
- Pro: उपयोगकर्ताओं को तुरंत रिस्पॉन्स का अनुभव होता है, क्योंकि सर्विस वर्कर कैश मेमोरी में सेव किए गए रिसॉर्स तुरंत लौटा देता है.
- Pro: सर्विस वर्कर यह पक्का कर सकता है कि किसी दिए गए यूआरएल के लिए अगला अनुरोध नेटवर्क से नए रिस्पॉन्स का इस्तेमाल करता है, क्योंकि "बैकग्राउंड में" फिर से पुष्टि करने की वजह से ऐसा होता है.
- नुकसान: एक अच्छी तरह से तय सर्विस वर्कर कैश मेमोरी में सेव करने की रणनीति ज़रूरी है.
स्थिति: कम समय के लिए कैश मेमोरी (नेटवर्क डेटा फिर से कैश मेमोरी में सेव करना)
- जब कैश किया गया कोई संसाधन सर्विस वर्कर कैश में मान्य होता है (<= 1 दिन): सर्विस वर्कर, संसाधन के लिए नेटवर्क पर जाता है. अगर ब्राउज़र में एचटीटीपी कैश से रिसॉर्स मौजूद होता है, तो वह उसे वहां से दिखाता है. अगर नेटवर्क डाउन है, तो सर्विस वर्कर, सर्विस वर्कर कैश मेमोरी से संसाधन वापस करता है
- सर्विस वर्कर कैश मेमोरी में कैश मेमोरी में सेव किए गए संसाधन की समयसीमा खत्म होने (एक दिन से ज़्यादा): जब सर्विस वर्कर, संसाधन को फ़ेच करने के लिए नेटवर्क पर जाता है. ब्राउज़र, नेटवर्क पर रिसॉर्स को फ़ेच करता है, क्योंकि एचटीटीपी कैश मेमोरी में कैश मेमोरी में सेव किए गए वर्शन की समयसीमा खत्म हो गई है.
फ़ायदे और नुकसान
- प्रो: नेटवर्क अस्थिर या बंद होने पर, सर्विस वर्कर तुरंत, कैश मेमोरी में सेव किए गए रिसॉर्स लौटा देता है.
- नुकसान: एचटीटीपी कैश को ओवरराइड करने और "पहले नेटवर्क" के अनुरोध करने के लिए सर्विस वर्कर को अतिरिक्त कैश-बस्टिंग की ज़रूरत होती है.
नतीजा
कैश मेमोरी में सेव किए जाने की स्थितियों के कॉम्बिनेशन की जटिलता को देखते हुए, सभी मामलों को शामिल करने वाला एक नियम नहीं बनाया जा सकता. हालांकि, पिछले सेक्शन में दी गई जानकारी के आधार पर, कैश की रणनीतियां तय करते समय, आपके लिए कुछ सुझाव दिए गए हैं:
- सर्विस वर्कर को कैश मेमोरी में सेव करने का लॉजिक, एचटीटीपी कैश मेमोरी में सेव करने की समयसीमा खत्म होने वाले लॉजिक के हिसाब से होना ज़रूरी नहीं है. अगर हो सके, तो सर्विस वर्कर को ज़्यादा कंट्रोल देने के लिए, सर्विस वर्कर में समयसीमा खत्म होने वाला लॉजिक इस्तेमाल करें.
- एचटीटीपी कैश मेमोरी अब भी एक अहम भूमिका निभाती है, लेकिन नेटवर्क के स्थिर या काम न करने पर, यह भरोसेमंद नहीं होता है.
- हर संसाधन के लिए अपनी कैश मेमोरी में सेव करने की रणनीतियों पर फिर से गौर करें, ताकि यह पक्का किया जा सके कि आपकी सर्विस वर्कर कैशिंग रणनीति, एचटीटीपी कैश से विरोध किए बिना, अपना मान देती है.