दिलचस्प पोस्ट
पाठ प्रतिक्रिया डाउनलोड करने के लिए मजबूर करने के लिए कौन सी सामग्री प्रकार है? सी ++ में एक कॉपी निर्माता को प्रतिबंधित करने का सबसे विश्वसनीय तरीका क्या है? क्यों नहीं JVM कैश JIT कोड संकलित? std :: vector और बहुआयामी arrays की लगातार स्मृति एक सूची से nth मान का चयन करने के लिए रीजेक्स, नल के लिए अनुमति वैश्विक ऑपरेटर की जांच के लिए एसएफआईएनएई का उपयोग करना <<? jQuery: आग क्लिक करें () धुंधला () ईवेंट से पहले वेबसाइट स्क्रीनशॉट बनाने के लिए कमांड लाइन प्रोग्राम (लिनक्स पर) <Jsp: include page = …> और <% @ के बीच अंतर क्या है file = …>? सी बुरा अभ्यास में लचीला सरणी के सदस्यों का उपयोग कर रहे हैं? जावास्क्रिप्ट – एम तत्वों के साथ एन एरेज़ से उत्पन्न संयोजन LinqPad – SQL कन्वर्ट करने के लिए Linq आदेश एमवीवीएम पैटर्न के साथ WPF OpenFileDialog? कस्टमएरर्स मोड = "ऑफ़" टुकड़ा और एडाप्टर के बीच अंतरफलक कैसे बनाऊँ?

क्यों सीआरएस और जावास्क्रिप्ट लिंक फाइल जैसे src = "../ cnt.js? Ver = 4.0" के पैरामीटर पास करें?

जब मैंने कई साइट्स स्रोत कोड को देखा, तो पैरामीटर को लिंकिंग फाइल (सीएसएस / जावास्क्रिप्ट) के पास भेज दिया गया था।

स्टैक ओवरफ़्लो स्रोत में, मुझे मिल गया

<script type="text/javascript" src="http://sstatic.net/js/master.js?v=55c7eccb8e19"></script> 

क्यों master.js?v=55c7eccb8e19 उपयोग किया जाता है?

मुझे यकीन है कि जावास्क्रिप्ट / सीएसएस फ़ाइलों को पैरामीटर नहीं मिल सकता है।

क्या कारण है?

वेब के समाधान से एकत्रित समाधान "क्यों सीआरएस और जावास्क्रिप्ट लिंक फाइल जैसे src = "../ cnt.js? Ver = 4.0" के पैरामीटर पास करें?"

यह आमतौर पर कैशिंग को रोकने के लिए किया जाता है।

मान लीजिए कि आप अपने नए एप्लिकेशन के संस्करण 2 परिनियोजित करते हैं और आप क्लाइंट को अपने सीएसएस को ताज़ा करने का कारण बनना चाहते हैं, तो आप यह अतिरिक्त पैरामीटर जोड़ सकते हैं कि यह सर्वर से इसे पुनः अनुरोध करे। बेशक, इसके अलावा अन्य तरीकों भी हैं, लेकिन यह बहुत आसान है।

जैसा कि दूसरों ने कहा है, यह संभवतः कैशिंग को नियंत्रित करने का एक प्रयास है, यद्यपि मुझे लगता है कि ऐसा करने के लिए सबसे अच्छा है ताकि वास्तविक संसाधन नाम ( foo.v2.js , foo.js?v=2 ) में एक संस्करण की बजाय क्वेरी स्ट्रिंग। (इसका मतलब यह नहीं है कि आपको फ़ाइलों का नाम बदलना है, अंतर्निहित फाइल में यूआरएल के मानचित्रण के बेहतर तरीके हैं।) यह आलेख , हालांकि चार साल पुरानी है और इसलिए वेब दुनिया में प्राचीन है, अभी भी काफी उपयोगी चर्चा है। इसमें, लेखक का दावा है कि आप संस्करणों के लिए क्वेरी स्ट्रिंग का उपयोग नहीं करना चाहते हैं क्योंकि:

… HTTP कैशिंग विनिर्देश के पत्र के अनुसार, उपयोगकर्ता एजेंट क्वेरी स्ट्रिंग के साथ URL कैश नहीं करना चाहिए। जबकि इंटरनेट एक्सप्लोरर और फ़ायरफ़ॉक्स इसे अनदेखा करते हैं, ओपेरा और सफारी नहीं करते …

यह कथन बिल्कुल सही नहीं हो सकता है, क्योंकि वस्तुतः वास्तव में क्या कहा गया है

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

(अंत में यह जोर मेरा है।) तो क्वेरी स्ट्रिंग में एक संस्करण का उपयोग करना ठीक हो सकता है जब तक कि आप स्पष्ट कैशिंग हेडर भी शामिल हो प्रदान किए गए ब्राउज़र ऊपर सही ढंग से लागू करते हैं और परदे के पीछे आप देखते हैं कि क्यों मुझे लगता है कि आप वास्तविक पैरामीटर के बजाय वास्तविक संसाधन लोकेटर के संस्करणों के साथ बेहतर हैं (जो [पुन:] इसका मतलब यह नहीं है कि आपको लगातार फाइल का नाम बदलना है, अधिक के लिए ऊपर लिखे लेख देखें)। आप जानते हैं कि यदि आप अपना नाम बदलते हैं, तो जिस तरह से ब्राउजर्स, प्रॉक्सी आदि इत्यादि अद्यतन संसाधन प्राप्त करने जा रहे हैं, जिसका मतलब है कि आप मध्यवर्ती कैश के लाभ को अधिकतम करने के लिए पिछले "नाम" को कभी न खत्म होने वाला कैश समय दे सकते हैं।

के बारे में:

मुझे यकीन है कि जेएस / सीएसएस फ़ाइलों को पैरामीटर नहीं मिल सकता है।

सिर्फ इसलिए कि परिणाम वापस आने वाला जावास्क्रिप्ट या सीएसएस संसाधन है, इसका मतलब यह नहीं है कि यह सर्वर की फाइल सिस्टम पर एक शाब्दिक फाइल है सर्वर क्वेरी स्ट्रिंग मापदंडों के आधार पर प्रोसेसिंग कर रहा था और कस्टम जावास्क्रिप्ट या सीएसएस प्रतिक्रिया उत्पन्न कर सकता था। कोई भी कारण नहीं है कि मैं अपने सर्वर को सभी .js फाइलों को रूट करने के लिए कॉन्फ़िगर नहीं कर सकता (PHP) हेडलर जो कि क्वेरी स्ट्रिंग को देखता है और दिए गए फ़ील्ड से मिलान करने के लिए अनुकूलित करता है। इस प्रकार, foo.js?v=2 शायद foo.js?v=1 से अलग हो सकता है foo.js?v=1 अगर मैंने अपना सर्वर ऐसा करने के लिए सेट अप किया है

यह फ़ाइल को कैशिंग से बचने के लिए है। संलग्न संस्करण नाम का जावास्क्रिप्ट फ़ाइल पर कोई प्रभाव नहीं है, लेकिन ब्राउज़र के कैशिंग इंजन पर यह अब एक अद्वितीय फ़ाइल जैसा दिखता है

उदाहरण के लिए, यदि आपके पास scripts.js और ब्राउजर पृष्ठ का दौरा करते हैं, तो वे डाउनलोड करते हैं और कैश (स्टोर) करते हैं जो कि अगले पृष्ठ को तेज़ी से विज़िट करने के लिए फाइल करता है हालांकि, यदि आप कोई बदलाव करते हैं तो कैश की समय सीमा समाप्त होने तक ब्राउजर इसे पहचान नहीं सकता है। हालांकि, scripts.js?v2 अब ब्राउज़र बल को फिर से लाता है क्योंकि "नाम बदल गया है" (भले ही यह नहीं है, बस सामग्री है)।

सीएसएस या जावास्क्रिप्ट कोड उत्पन्न करने वाली एक सर्वर-साइड स्क्रिप्ट उनको इस्तेमाल कर सकती है, लेकिन संभवतः यूआरआई बदलने के लिए उपयोग किया जा रहा है जब फाइल की सामग्री बदलती है ताकि पुरानी, ​​कैश्ड संस्करण समस्याएं पैदा नहीं करेगा।

 <script type="text/javascript"> // front end cache bust var cacheBust = ['js/StrUtil.js', 'js/protos.common.js', 'js/conf.js', 'bootstrap_ECP/js/init.js']; for (i=0;i<cacheBust.length;i++){ var el = document.createElement('script'); el.src = cacheBust[i]+"?v=" + Math.random(); document.getElementsByTagName('head')[0].appendChild(el); } </script> 

यह ब्राउज़र को जज फाइल को फिर से कैश करने के लिए मजबूर करता है यदि कोई अपडेट हो।

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

यह सर्वर से भेजे जाने वाली सभी फ़ाइलों पर लागू होता है btw

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

"मुझे यकीन है कि जावास्क्रिप्ट / सीएसएस फ़ाइलों को पैरामीटर नहीं मिल सकता"

 function getQueryParams(qs) { qs = qs.split("+").join(" "); var params = {}, tokens, re = /[?&]?([^=]+)=([^&]*)/g; while (tokens = re.exec(qs)) { params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]); } return params; } 

इसे कैश बस्टिंग के रूप में जाना जाता है

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

कई तरह के कैश-पर्दाफाश हैं, उदाहरण के लिए:

  • स्थिर
  • दिनांक समय
  • सॉफ्टवेयर संस्करण
  • टुकड़ों में बांटा-सामग्री

मैंने पहले कैश को नष्ट करने वाले कैश पर एक लेख लिखा है जिसे आप उपयोगी पा सकते हैं:

http://curtistimson.co.uk/front-end-dev/what-is-cache-busting/