दिलचस्प पोस्ट
एंड्रॉइड स्टूडियो में कैसे स्वच्छ प्रोजेक्ट करें? क्या रूबी में सिंगल कोट्स बनाम डबल कोट्स का उपयोग करने में कोई लाभ है? php मेल 'से' हैडर के साथ समस्या कैसे पता कैसे एक संकेतक ढेर या स्टैक को इंगित करता है? एएसपी.नेट एमवीसी – टेम्पाडेटा – अच्छा या बुरा अभ्यास "गैर-स्थिर वैरिएबल यह एक स्थिर संदर्भ से संदर्भित नहीं किया जा सकता है" जब कोई ऑब्जेक्ट बनाते हैं कैसे mockito साथ शून्य तरीकों से नकली बनाने के लिए हम एक (गैर-स्थिर) आंतरिक वर्ग में स्थिर विधि क्यों नहीं कर सकते? राज्यों / प्रांतों की भौगोलिक सीमाएं -> Google मानचित्र बहुभुज पी-वैल्यू खींचें और रैखिक प्रतिगमन से आर-स्क्वायर खींचें पुश नोटिफिकेशन को प्रबंधित करना जब ऐप नहीं चल रहा है एक रैजेक्स में क्या अक्षर को बचाना चाहिए? HTML कैनवास जावास्क्रिप्ट पुस्तकालयों और चौखटे में कला की वर्तमान स्थिति क्या है? इकाई फ़्रेमवर्क 4 में अद्वितीय कुंजी छवि डेटा का हिस्टोग्राम प्रदर्शित करना

कैश किए गए सीएसएस डेटा की ताज़ा करें

क्या यह संभव है कि ब्राउज़र कैश्ड सीएसएस को ताज़ा करे?

यह हर अनुरोध के रूप में सरल नहीं है हमारे पास एक ऐसी साइट है जिसके पास कुछ समय के लिए स्थिर सीएसएस था।

अब हमें सीएसएस को कुछ प्रमुख अपडेट करने की आवश्यकता है; हालांकि, सीएसएस को कैश्ड रखने वाले ब्राउज़रों को कुछ दिनों के लिए नया सीएसएस नहीं मिलेगा जिससे प्रतिपादन समस्याएं पैदा हो सकेंगी।

क्या सीएसएस के ताज़ा करने का कोई तरीका है या क्या हम सिर्फ संस्करण विशिष्ट सीएसएस यूआरएल के लिए विकल्प चुनना चाहते हैं?

वेब के समाधान से एकत्रित समाधान "कैश किए गए सीएसएस डेटा की ताज़ा करें"

इस पर विचार करने के लिए कई तरीके हैं और विभिन्न तरीके हैं। सबसे पहले, कल्पना

हम क्या पूरा करने की कोशिश कर रहे हैं?

आदर्श रूप से, एक संशोधित संसाधन बिना शर्त बिना पहली बार अनुरोधित किया जाएगा, और तब स्थानीय कैश से पुनर्प्राप्त किया जाता है जब तक कि इसके बाद के सर्वर इंटरैक्शन के साथ समाप्त नहीं हो जाता।

सचेत कैशिंग व्यवहार

विभिन्न क्रमपरिवर्तनों को ट्रैक करना थोड़ा भ्रमित हो सकता है, इसलिए मैंने निम्नलिखित तालिका बनाई। इन टिप्पणियों को आईआईएस के विरुद्ध क्रोम से अनुरोध करके और डेवलपर कंसोल में प्रतिक्रिया / व्यवहार देखकर उत्पन्न किया गया था।

सभी मामलों में, एक नया यूआरएल HTTP 200 में परिणाम होगा। महत्वपूर्ण बात यह है कि बाद के अनुरोधों के साथ क्या होता है।

+---------------------+--------------------+-------------------------+ | Type | Cache Headers | Observed Result | +---------------------+--------------------+-------------------------+ | Static filename | Expiration +1 Year | Taken from cache | | Static filename | Expire immediately | Never caches | | Static filename | None | HTTP 304 (not modified) | | | | | | Static query string | Expiration +1 Year | HTTP 304 (not modified) | | Static query string | Expire immediately | HTTP 304 (not modified) | | Static query string | None | HTTP 304 (not modified) | | | | | | Random query string | Expiration +1 Year | Never caches | | Random query string | Expire immediately | Never caches | | Random query string | None | Never caches | +---------------------+--------------------+-------------------------+ 

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

क्वेरी स्ट्रिंग

एएसपी.Net MVC रेजर सिंटैक्स में उदाहरण, लेकिन लगभग किसी भी सर्वर प्रसंस्करण भाषा में लागू होता है।

… क्योंकि कुछ अनुप्रयोगों ने परंपरागत रूप से क्वेरी यूआरएल के साथ जीईटी और हेड को इस्तेमाल किया है (जो कि रिलेपेथ के हिस्से में एक "?" युक्त) महत्वपूर्ण साइड इफेक्ट्स के साथ कार्य करने के लिए, कैश को ऐसे यूआरआई के प्रतिक्रियाओं का इलाज नहीं करना चाहिए, जब तक कि सर्वर एक स्पष्ट समाप्ति समय इसका विशेष रूप से अर्थ है कि ऐसे यूआरआई के लिए HTTP / 1.0 सर्वर से प्रतिक्रिया कैश से नहीं ली जानी चाहिए।

आपके एचटीएमएल में शामिल सीएसएस यूआरएल के अंत में एक यादृच्छिक पैरामीटर जोड़ना एक नया अनुरोध करने के लिए मजबूर होगा और सर्वर को HTTP 200 (304 नहीं होगा, भले ही इसे संशोधित न किया गया हो) के साथ जवाब देना चाहिए।

 <link href="normalfile.css?random=@Environment.TickCount" /> 

बेशक, यदि हम प्रत्येक अनुरोध के साथ क्वेरी स्ट्रिंग यादृच्छिक करते हैं, तो यह पूरी तरह से कैशिंग को खत्म करेगा। उत्पादन कार्यक्रम के लिए यह शायद ही कभी / कभी वांछनीय है

यदि आप केवल कुछ यूआरएल को बनाए रखते हैं, तो आप मैन्युअल रूप से उन्हें एक बिल्ड नंबर या डेट रखने के लिए संशोधित कर सकते हैं:

 @{ var assembly = Assembly.GetEntryAssembly(); var name = assembly.GetName(); var version = name.Version; } <link href="normalfile.css?build=@version.MinorRevision" /> 

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

पथ संशोधन

एक बेहतर तरीका एक नया रास्ता बनाना है थोड़ा प्रयास के साथ, इस प्रक्रिया को संस्करण संख्या (या कुछ अन्य सुसंगत पहचानकर्ता) के साथ पथ को फिर से लिखने के लिए स्वचालित किया जा सकता है।

यह उत्तर गैर-माइक्रोसॉफ्ट प्लेटफार्मों के लिए कुछ सरल और सुरुचिपूर्ण विकल्प दिखाता है।

माइक्रोसॉफ्ट डेवलपर्स एक एचटीएमएल मॉड्यूल का उपयोग कर सकते हैं जो किसी दिए गए फाइल प्रकार (यों) के लिए सभी अनुरोधों को रोकता है, या संभवतः एक एमवीसी रूट / कंट्रोलर कॉम्बो का उपयोग सही फ़ाइल को पूरा करने के लिए (मैंने यह नहीं देखा है, लेकिन मेरा मानना ​​है कि यह संभव है )।

बेशक, सरलतम (जरूरी नहीं कि सबसे तेज़ या सर्वोत्तम) पद्धति केवल प्रत्येक रिलीज के साथ फाइल में नाम बदलने और link टैग में अद्यतन पथ को संदर्भित करना है।

TLDR

  • फ़ाइल नाम या क्वेरी स्ट्रिंग बदलें
  • एक ऐसे परिवर्तन का उपयोग करें जो प्रति रिलीज़ केवल एक बार होता है
  • फ़ाइल का नाम बदलना क्वेरी स्ट्रिंग परिवर्तन के लिए बेहतर है
  • कैशिंग के लाभों को अधिकतम करने के लिए हमेशा HTTP हेडर सेट करें

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

एक अन्य समाधान है:

 <FilesMatch "\.(js|css)$"> Header set Cache-Control "max-age=86400, public" </FilesMatch> 

यह अधिकतम कैश उम्र 1 दिन या 86400 सेकंड तक सीमित करता है।

यू अपाचे में ऐसा करने में सक्षम हो सकता है …

 <FilesMatch "\.(html|htm|js|css)$"> FileETag None <IfModule mod_headers.c> Header unset ETag Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" Header set Pragma "no-cache" Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" </IfModule> </FilesMatch>