2012-11-16 32 views
5

मैं समझता हूँ के रूप में, यह कैसे काम करता है ब्राउज़र कैशिंग है। मान लीजिए, एक भविष्य का हेडर एक वर्ष कहने के लिए सेट किया गया है और foo.js को कैश करने के लिए सेट किया गया है। यहां कुछ परिदृश्य दिए गए हैं:आप हमेशा संचित फ़ाइलों को लाने के लिए और एक 304 के लिए एक राउंड ट्रिप ऐसा नहीं एक ब्राउज़र के लिए मजबूर कर सकते हैं?

  1. पृष्ठ पर पहली बार जाएं, सर्वर 200 लौटाता है और foo.js एक वर्ष के लिए कैश किया जाता है।

  2. अगला यात्रा, ब्राउज़र कैश की जाँच करता है, लेकिन सर्वर की जांच करने के लिए यदि foo.js संशोधित किया गया है है। यदि नहीं, सर्वर 304 लौटाता है - संशोधित नहीं।

  3. उपयोगकर्ता पहले से ही पृष्ठ पर है (और foo.js कैश में है) किसी अन्य पृष्ठ पर जाने के लिए एक लिंक पर क्लिक करता है, ब्राउज़र foo.js के कैश किए गए संस्करण को देखता है और सर्वर पर राउंडट्रिप किए बिना इसे सेवा देता है और एक 200 (कैश) देता है।

  4. उपयोगकर्ता पहले से ही पृष्ठ पर है (और foo.js कैश में है) और किसी कारण से F5/Reload हिट करता है, ब्राउज़र कैश की जांच करता है लेकिन सर्वर पर एक राउंड ट्रिप करना है और जांचें कि foo.js है या नहीं संशोधित किया गया है। यदि नहीं, तो सर्वर एक 304.

आप देख सकते हैं, जब भी एक पेज ताजा है, यह हमेशा करता है, तो फ़ाइल संशोधित किया गया है या नहीं की जाँच करने के लिए सर्वर के लिए एक यात्रा करना होगा देता है। मुझे पता है कि यह बहुत कुछ नहीं है और सर्वर केवल हेडर जानकारी लौटाएगा लेकिन कुछ मामलों में एक राउंड ट्रिप टाइम बेहद महत्वपूर्ण है।

सवाल यह है, वहाँ एक रास्ता के बाद से मैं पहले से ही फ़ाइलों के लिए समय सीमा समाप्ति सेट कर रहा हूं कि मैं इस से बचने कर सकते हैं। मैं सिर्फ यह हमेशा कैश से यह लाने के लिए जब तक समाप्ति समाप्त हो गया है या (यह वर्ज़निंग से) कुछ और के साथ फ़ाइल को बदलने के लिए चाहते हैं।

+0

2 सही प्रतीत नहीं होता है जब तक कि हेडर कहते हैं कि आपको हमेशा पुन: वैध होना चाहिए –

उत्तर

0

मैं क्या समझते हैं, F5 दबा से/Ctrl-R इस प्रकार ब्राउज़र को नियंत्रण छोड़ रहा है, ब्राउज़र विशिष्ट कार्रवाई है।

उपयोगकर्ता किसी अन्य कार्रवाई क्लिक करने से पहले कैश को साफ करता है क्या होगा अगर? तो, भले ही वहाँ जबरदस्ती F5 में कैश का उपयोग करने के HTTP विनिर्देशन था, वहाँ कोई गारंटी नहीं है कि आप अपनी जरूरत को प्राप्त करने में सक्षम हो जाएगा है।

आप कॉन्फ़िगर और जहां भी अधिकतम संभव कोड कैश और उपयोगकर्ता के लिए आराम छोड़ दें।

0

यह की तरह लग रहा है जब आप एक पृष्ठ पर नेविगेट (कि URL बार में पता या एक लिंक पर क्लिक किया जाता है), संसाधन सर्वर के लिए एक HEAD अनुरोध के बिना कैश से लाई जाती हैं। लेकिन जब आप पृष्ठ को रीफ्रेश करते हैं तो यह HEAD अनुरोध ans को आरटीटी करता है।

यह IE के डेवलपर उपकरण का नेटवर्क टैब में और अधिक स्पष्ट लग रहा है। आप initator स्तंभ देखते हैं, तो CTRL+R या F5 के लिए पहले मामले के लिए navigate और refresh कहते हैं।

आप उन पर एक घटना श्रोता जोड़ने और एक window.location = window.location करके F5 और CTRL+R व्यवहार को ओवरराइड और द्वारा event.peventDefault या कुछ इसी तरह के डिफ़ॉल्ट व्यवहार को रोका जा सकता है। यह रीफ्रेश के बजाय पृष्ठ नेविगेशन का कारण बन जाएगा।

इसके अलावा, मैंने मामले का परीक्षण नहीं किया जब कैश संसाधन वास्तव में सर्वर पर बदल गया है। यदि यह कोई समस्या साबित हो जाता है, तो आप इसे संसाधनों के संस्करण संख्या और एचटीएमएल की पीढ़ी के संसाधनों के नवीनतम संस्करण को इंगित करने वाले यूआरएल के साथ हल कर सकते हैं (जैसे एचटीएमएल 5 ऑफ़लाइन अनुप्रयोगों के साथ कैश-मैनिफेस्ट समस्या की तरह)।

संपादित करें: यदि उपयोगकर्ता ब्राउज़र के रीफ्रेश बटन पर क्लिक करता है तो यह समस्या हल नहीं करता है; onbeforeunload घटना उस मामले में मदद कर सकती है।