2009-06-05 19 views
14

एएसपीनेट एप्लिकेशन के भीतर ब्राउज़र कैशिंग करने के तरीके के बारे में कोई सुझाव। मुझे कुछ अलग-अलग तरीकों को ऑनलाइन मिला है लेकिन यह सुनिश्चित नहीं था कि सबसे अच्छा क्या होगा। विशेष रूप से, मैं अपने सीएसएस और जेएस फाइलों को कैश करना चाहता हूं। वे बदलते हैं, हालांकि, यह आमतौर पर महीने में एक बार सबसे अधिक होता है।एएसपी.NET अनुप्रयोग में ब्राउज़र कैशिंग

+0

यह प्रश्न देखें: http://stackoverflow.com/questions/914027/disabling-browser-caching-for-all-browsers-from-asp-net –

उत्तर

6

एक और तकनीक आपको किसी अन्य सर्वर पर स्थिर छवियों, सीएसएस और जेएस को स्टोर करना है (जैसे CDN) जिसमें एक्सपियर हेडर सेट ठीक से सेट है। इस का लाभ दो गुना है:

  1. समाप्त हो रहा हैडर ब्राउज़र और प्रॉक्सी स्थिर फ़ाइलों को की सेवा आपके सर्वर से ये स्टैटिक फ़ाइलें
  2. CDN ऑफलोड होगा कैश करने के लिए प्रोत्साहित करेंगे।
  3. अपनी स्थिर सामग्री के लिए अन्य डोमेन नाम का उपयोग करके, ब्राउज़र तेज़ी से डाउनलोड हो जाएंगे। ऐसा इसलिए है क्योंकि serving resources from four or five different hostnames increases parallelization of downloads
  4. यदि सीडीएन सही तरीके से कॉन्फ़िगर किया गया है और cookieless domain का उपयोग करता है तो आपके पास अनावश्यक कुकीज़ नहीं चलती हैं।
3

आप यह करने के लिए सबसे अच्छा शर्त है कि आईआईएस में एक्सपर्स हेडर सेट करने के लिए उन फ़ोल्डर्स पर जिन्हें आप सामग्री कैश करना चाहते हैं। यह इस स्थिर सामग्री को कैश करने के लिए सबसे आधुनिक ब्राउज़र और प्रॉक्सी को बताएगा। आईआईएस 6:

  1. फ़ोल्डर (उदाहरण सीएसएस या जेएस) पर राइट क्लिक करें जिसे आप ब्राउज़र द्वारा कैश करना चाहते हैं।
  2. क्लिक करें गुण
  3. को HTTP हेडर टैब
  4. चेक "सक्षम सामग्री समाप्ति"
  5. समाप्ति के लिए कुछ लंबी अवधि सेट
  6. जाओ,

याहू डेवलपर ब्लॉग talks about this technique "90 दिनों के बाद समाप्त हो जाती" की तरह ।

+0

मेरे पास आईआईएस तक पहुंच नहीं है। मुझे लगता है कि मैं जो खोज रहा था वह कोड के माध्यम से ऐसा करने का एक अच्छा तरीका था। – Jason

+0

यदि एएसपी.नेट सीएसएस और जेएस फाइलों की सेवा कर रहा है, तो आप कोड में स्वयं एक ही तकनीक कर सकते हैं ... Response.Cache.SetExpires (DateTime.Now.AddYears (1)); – Keltex

+0

एएसपी.नेट सेवा नहीं करेगा! डिफ़ॉल्ट रूप से एएसपी.नेट संसाधन, हालांकि उसे अनिवार्य रूप से आईआईएस तक पहुंच की आवश्यकता होगी – annakata

2

जब तक आप आईआईएस को जेएस/सीएसएस/छवि अनुरोधों के एएसपीनेट नियंत्रण देने के लिए कॉन्फ़िगर नहीं करते हैं, तो यह उन्हें डिफ़ॉल्ट रूप से नहीं देखेगा, इसलिए आपकी सबसे अच्छी योजना (दीर्घकालिक रखरखाव के लिए) जानबूझकर आपकी फ़ायरवॉल पर प्रतिक्रिया शीर्षकों को ट्विक करना है/trafficmanager/सर्वर या (बेहतर और क्या दुनिया के सबसे इस बिंदु पर है) संस्करण के लिए अपनी फ़ाइलें रास्ते में, अर्थात्:

इसके बजाय अपनी छाप-अप में इस लेखन की:

http://www.foo.com/cachingmakesmesad.css 

इसका उपयोग करें:

http://www.foo.com/cachingmakesmesad.css?v1 

.. और जब आपको प्रभावी ढंग से कैश साफ़ करने की आवश्यकता होती है तो संस्करण संख्या बदलें। यदि यह हर बार होता है तो आप इसके बजाय एक GUID या डेटास्टैम्प भी जोड़ सकते हैं, लेकिन मैं किसी भी अवसर पर नहीं सोच सकता जहां मैं वास्तव में ऐसा करना चाहता हूं।


मैंने सोचा था कि अपने प्रश्न विरोधी कैश, लेकिन यह फिर से पढ़ने मैं देख रहा हूँ मैं वहाँ एक अच्छा जवाब व्यर्थ था: पी

लंबी कहानी संक्षेप में, ब्राउज़र सामान्य रूप से बहुत आक्रामक समर्थक कैशिंग "सरल" संसाधन हैं इसलिए आपको इसके बारे में चिंता करने की ज़रूरत नहीं है, लेकिन अगर आप इसके बारे में कुछ करना चाहते हैं तो आपको उपर्युक्त कारणों से फ़ायरवॉल/ट्रैफिकमैनगर/आईआईएस तक पहुंच प्राप्त करनी होगी (एएसपी.नेट को एक मौका नहीं दिया जाएगा चूक)।

हालांकि ... कोई तरीका नहीं है कि आप पूरी तरह से कैशिंग को मजबूर कर सकते हैं, और न ही आपको चाहिए। कैश किया गया है और कैश नहीं है सही तरीके से अंतिम उपयोगकर्ता का निर्णय है, आप जो भी कर सकते हैं वह दृढ़ता से अनुरोध है।

4

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

आईई डिफ़ॉल्ट रूप से कैशिंग के संबंध में कोई विशिष्ट निर्देश नहीं छोड़ेगा, यह निर्धारित करने के लिए कि क्या इसे किसी आइटम को फिर से अनुरोध करने के लिए परेशान होना चाहिए या नहीं। स्पष्ट रूप से यह नहीं बताया गया कि यह संसाधन को कैश कर सकता है। इसकी ह्यूरिस्टिक्स संसाधन की आखिरी संशोधित तारीख पर आधारित होती है, पुरानी इसकी संभावना कम हो जाती है, यह अब इसकी सामान्य तर्क है। बहुत ऊनी

स्पष्ट रूप से यदि आप एक साइट परफॉर्मेंट बनाना चाहते हैं तो आपको ऐसी कैश सेटिंग्स पर नियंत्रण रखना होगा। यदि आपके पास इन सेटिंग्स तक पहुंच नहीं है तो प्रदर्शन के बारे में चिंता न करें। बस प्रायोजक को सूचित करें कि यह अच्छा प्रदर्शन नहीं कर सकता क्योंकि उन्होंने एक मंच को सुविधाजनक नहीं बनाया है जो आपको इसे वितरित करने देता है।

2

इन नेट में आप अपनी जावास्क्रिप्ट, सीएसएस और छवियों को एम्बेडेड संसाधनों के रूप में सेट अप कर सकते हैं। नेट तब आपके लिए फ़ाइल समाप्ति को संभालेगा। इस दृष्टिकोण का नकारात्मक पक्ष यह है कि आपको परिवर्तनों के प्रत्येक सेट के लिए एक नया निर्माण करना है (यह आपके तैनाती और वर्कफ़्लो के आधार पर उल्टा हो सकता है)।

आप ईटैग का भी उपयोग कर सकते हैं, लेकिन कुछ मामलों में जो कुछ मैं समझता हूं उससे यह अच्छी तरह से काम नहीं करता है यदि आपके पास IIS and apache Webservers hosting your images का मिश्रण है, (या यदि आप भविष्य में स्विच करने की योजना बना रहे हैं)।

आप केवल यह सुनिश्चित कर सकते हैं कि फ़ाइल की तारीख नई है, और सर्वर को आपके लिए इसे संभालने दें, लेकिन आपको यह सुनिश्चित करना होगा कि सर्वर सही तरीके से कॉन्फ़िगर किया गया है।

2

आप

<system.webServer> 
    <staticContent> 
     <clientCache httpExpires="Tue, 12 Apr 2016 00:00:00 GMT" cacheControlMode="UseExpires" /> 
    </staticContent> 
</system.webServer> 

अधिक जानकारी के लिए clientCache documentation देखें web.config में निम्न कोड जोड़कर स्थिर सामग्री को कैश कर सकते हैं।

संबंधित मुद्दे