2010-08-04 11 views
15

में ब्राउज़र स्क्रिप्ट कैशिंग बंद करें मेरे पास हमारे क्लाइंट की मशीनों पर एक जीडब्ल्यूटी ऐप तैनात है। चल रहे विकास के साथ-साथ, हमें समय-समय पर एप्लिकेशन फ़्रॉन समय के नए उन्नत संस्करणों को रिलीज़ करना होगा। हर हम एक नया संस्करण हम अक्सर समस्या जहां ग्राहक के ब्राउज़र वर्ष लिपियों scriptsand एक के लिए, जबकि यह strangly डेटा यह के साथ काम करने की कोशिश कर रहा है के रूप में व्यवहार इसके साथ काफी संगत नहीं है कैश की गई है में चलाने को छोड़ दें। इस समस्या को दूर करने के लिए सबसे अच्छा तरीका क्या है। वर्तमान में मुझे उपयोगकर्ताओं को को एक नई रिलीज के लिए अपने ब्राउज़र के कैश को साफ़ करने के लिए बताना है, लेकिन यह अच्छा होगा उन्हें ऐसा करने की ज़रूरत नहीं है।जीडब्ल्यूटी ऐप

उत्तर

14

डिफ़ॉल्ट रूप से, अपने अनुप्रयोग के थोक ब्राउज़र द्वारा कैश किया जाना चाहिए जब तक यह का एक नया संस्करण अपने निर्माण की प्रक्रिया से उत्पन्न होता है।

यह GWT बूटस्ट्रैपिंग मॉडल को समझने के लिए समझने के लिए यह कैसे काम करता मदद कर सकता है।

आपकी क्लाइंट अनुरोध, your-app-name.nocache.js की पहली स्क्रिप्ट कैश नहीं है, और यह ब्राउज़र के उपयोगकर्ता एजेंट और क्षमताओं को छोड़कर कुछ भी नहीं करता है, और प्रासंगिक ऐप जेएस के लिए दूसरा अनुरोध करता है।

इस बिंदु पर, स्क्रिप्ट यह अनुरोध करता है ब्राउज़र द्वारा संचित किया जा चाहिए, अगर यह पहले से अनुरोध किया गया है। यह {indistinguisable-numbers-and-letters}.cache.html फ़ाइल है।

आप अपने अनुप्रयोग पुनर्वितरित करते हैं, nocache.js फ़ाइल निष्पादित किया जाएगा और सर्वर है, जो पहले से ही कैश में मौजूद नहीं होगा से एक अलग cache.html फ़ाइल के लिए पूछना है, लेकिन जो एक बार इसे डाउनलोड किया जाता है ब्राउज़र द्वारा इसे साफ़ कर दिया।

आप कुछ भी अपने सर्वर पर, या के साथ बंधन टाल कैशिंग हेडर के साथ असामान्य कर रहे हैं? यह संभावित रूप से कैश प्राप्त करने के लिए आपकी nocache.js फ़ाइल का कारण बन सकता है, जो ब्राउज़र कैश से पुराने cache.html s का अनुरोध करेगा।

+2

जेसन, ऐसा लगता है कि यह ब्राउज़र में कैश किए जाने पर आपके-ऐप-name.nocache.js का दुष्प्रभाव है। शाहिद को अपने सर्वर को केवल * .cache.js को कैश करने और * .nocache.js को कैश करने के लिए कॉन्फ़िगर करना है। आपके द्वारा उल्लेखित सब कुछ के अलावा स्वचालित रूप से गिरना चाहिए। –

+0

@ जेसन-हॉल किसी भी विचार को आपके ऐप-name.nocache.js के माध्यम से लोड की गई स्क्रिप्ट के यूआरएल में कुछ हैश इंजेक्ट करने के तरीके पर कोई विचार है? मेरे मामले में आपका-ऐप-name.nocache.js कैशिंग के बिना सही ढंग से लोड किया गया है, लेकिन इसके परिणामस्वरूप लोड की गई स्क्रिप्ट, अभी भी कैश से हैं। मैं हर निर्माण पर एक हैश उत्पन्न करना चाहता हूं और इसे यूआरएल में जोड़ना चाहता हूं ... – Mabedan

15

संभव समाधान जिस तरह से आप अपने आवेदन की मेजबानी कर रहे हैं पर निर्भर करता है।

http://code.google.com/p/tadedon/source/browse/tadedon-servlet/src/main/java/com/xemantic/tadedon/servlet/CacheDisablingFilter.java

http://code.google.com/p/tadedon/source/browse/tadedon-servlet/src/main/java/com/xemantic/tadedon/servlet/CacheForcingFilter.java

:

http://seewah.blogspot.com/2009/02/gwt-tips-2-nocachejs-getting-cached-in.html

यहाँ tadedon पुस्तकालय से उपयुक्त फ़िल्टर कर रहे हैं: आप सीधे सर्वलेट कंटेनर से होस्ट कर रहे हैं, तो आप यहाँ वर्णित एक की तरह सर्वलेट फिल्टर का उपयोग कर सकते

और यहां guice ServletModule है जो उन्हें पूरे guice वेब अनुप्रयोग के लिए सक्षम बनाता है:

http://code.google.com/p/tadedon/source/browse/tadedon-gwt/src/main/java/com/xemantic/tadedon/gwt/http/GwtHttpCachingModule.java

यदि आप टोमकैट के सामने कुछ रिवर्स प्रॉक्सी का उपयोग कर रहे हैं तो यह भी आसान होगा। अपाचे के मामले में (उदा। Mod_proxy, mod_jk), और यह मानते हुए कि सभी एप्लिकेशन संसाधन (एचटीएमएल, ग्राफिक्स, जावा स्क्रिप्ट, सीएसएस, इत्यादि।"परफेक्ट कैशिंग" खंड में

http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.html

:) अपाचे पर डाल रहे हैं, बस अपाचे विन्यास में ये विकल्प सेट:

<Files *.nocache.*> 
    ExpiresDefault "access" 
</Files> 

<Files *.cache.*> 
    ExpiresDefault "now plus 1 year" 
</Files> 

यह यहाँ वर्णित है। इस तरह के परिनियोजन परिदृश्य मानते हैं कि केवल आरपीसी अनुरोधों को रिवर्स प्रॉक्सी से टॉमकैट में जाना चाहिए। अगर कुछ कारणों से सभी एप्लिकेशन संदर्भ टॉमकैट से जुड़े हुए हैं तो आप अभी भी Files निर्देश के बजाय अपाचे के LocationMatch निर्देश का उपयोग कर सकते हैं।