दिलचस्प पोस्ट
चयन 2 लटकती लेकिन उपयोगकर्ता द्वारा नए मानों की अनुमति है? स्थानीय चर, एक उदाहरण फ़ील्ड, एक इनपुट पैरामीटर और एक क्लास फील्ड के बीच अंतर क्या है? अपने संबंधित मूल्यों के आधार पर सॉर्ट किया गया एनएसएडीआई कुंजियाँ Backstack में टुकड़े के साथ onSaveInstanceState का उपयोग करना? जीएसएन के साथ JSON अर्रे को पार्स कैसे करें I मैं सीएसएस में केवल पाठ का पृष्ठभूमि का रंग कैसे सेट करूं? MySQL उपयोगकर्ता डीबी में पासवर्ड कॉलम नहीं है – OSX पर MySQL स्थापित करना जावा स्ट्रिंग.substring विधि संभावित स्मृति रिसाव? Django में पायथन लॉगिंग के सुरुचिपूर्ण सेटअप त्रि.सं. पायथन के साथ UTF-8 स्ट्रिंग को MySQL लिखना कैसे एक वस्तु है कि BufferedImages शामिल serialize करने के लिए Log4j के लिए उत्पादन सेटिंग्स फ़ाइल? एक अन्य वर्ग से एक चर तक पहुंच मैं एक नई लाइन / कैरिज रिटर्न को एक element.textContent में कैसे सम्मिलित कर सकता / सकती हूं?

पैराशंस के माध्यम से कैश पर्दाफाश

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

<link rel="stylesheet" href="base_url.com/file.css?v=1.123"/> 

दो सवाल: क्या यह प्रभावी ढंग से कैश को तोड़ देगा? क्या परम ने ब्राउज़र को तब उस यूआरएल से प्रतिक्रिया कैश नहीं किया, क्योंकि परम ने इंगित किया कि यह गतिशील सामग्री है?

वेब के समाधान से एकत्रित समाधान "पैराशंस के माध्यम से कैश पर्दाफाश"

परम ?v=1.123 एक क्वेरी स्ट्रिंग इंगित करता है, और इसलिए ब्राउज़र यह सोचें कि यह एक नया रास्ता है, कहते हैं ?v=1.0 इस प्रकार फ़ाइल से लोड करने के कारण, कैश से नहीं। जैसा तुम चाहो।

और, ब्राउज़र यह मान देगा कि स्रोत अगली बार जब आप कॉल ?v=1.123 और उसे उस स्ट्रिंग के साथ कैश करना चाहिए । तो यह कैश्ड रहेगा, हालांकि आपके सर्वर की स्थापना की जाती है, जब तक आप ?v=1.124 या इतने पर।

दो सवाल: क्या यह प्रभावी ढंग से कैश को तोड़ देगा?

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

क्या परम ने ब्राउज़र को तब उस यूआरएल से प्रतिक्रिया कैश नहीं किया, क्योंकि परम ने इंगित किया कि यह गतिशील सामग्री है?

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

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

ध्यान दें, इंटरनेट पर कहीं भी सबसे बड़ी संस्करण की तैनाती में, jQuery वास्तविक संख्या में संस्करण संख्याओं का उपयोग करता है और यह सुरक्षित रूप से किसी भी विशेष सर्वर-साइड लॉजिक के बिना कई संस्करणों को सह-अस्तित्व की अनुमति देता है (प्रत्येक संस्करण सिर्फ एक अलग फ़ाइल है)।

जब आप नए पृष्ठों और नई लिंक की गईं फ़ाइलें (जो कि आप चाहते हैं) को तैनात करते हैं और तब से उन संस्करणों को प्रभावी रूप से कैश किया जा सकता है (जिसे आप चाहते हैं), यह एक बार कैश को भुलाता है।

क्लाइंट ने संसाधन डाउनलोड किया है, यह एक बार कैश को भुला देगा, अन्य सभी प्रतिक्रिया क्लाइंट कैश से सेवा की जाएगी जब तक कि:

  1. v पैरामीटर अपडेट किया गया है।
  2. ग्राहक अपने कैश को साफ करता है

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

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

सामान्य तौर पर यह ठीक होना चाहिए, लेकिन यदि यह एक मध्यवर्ती कैश (एक प्रॉक्सी) है जो अनुरोध पैरामीटरों को अनदेखा करने के लिए कॉन्फ़िगर किया गया है, तो इसके लिए काम करना संभव नहीं है

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

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

2 तकनीकों (क्वेरी स्ट्रिंग बनाम फ़ाइल नाम) की तुलना यहां मिली:

संस्करण के रूप में एक क्वेरी स्ट्रिंग में दो समस्याएं हैं

सबसे पहले, यह हमेशा एक ऐसा ब्राउज़र नहीं हो सकता है जो कैशिंग लागू करता है जिसके माध्यम से हमें बस्ट की आवश्यकता होती है। ऐसा कहा जाता है कि कुछ (संभवतः पुराने) प्रॉक्सी उनके कैशिंग व्यवहार के संबंध में क्वेरी स्ट्रिंग की उपेक्षा करते हैं।

दूसरा, कुछ अधिक जटिल परिनियोजन परिदृश्यों में, जहां आपके एकाधिक फ्रंटएण्ड और / या एकाधिक बैकएंड सर्वर हैं, एक अपग्रेड कुछ भी है, लेकिन तात्कालिक है आपको एक ही समय में अपनी संपत्ति के पुराने और नए संस्करण दोनों को काम करने में सक्षम होना चाहिए। उदाहरण के लिए देखें कि Google App Engine का उपयोग करते समय यह आपके कैसी प्रभावित करता है।

फाइलों की सेवा करते समय पथ के कुछ हिस्से को अनदेखा करने के लिए एचटीएसीयूएस mod_rewrite का उपयोग करना एक अन्य समान दृष्टिकोण है। आपका कभी-कैश्ड अनुक्रमणिका पृष्ठ फाइलों के नवीनतम पथ का संदर्भ नहीं देता है।

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

संस्करण संख्या के लिए पथ के अनदेखी हिस्से का उपयोग करें, और सर्वर केवल इसे अनदेखा कर देता है और निरर्थक फ़ाइल का उपयोग करता है।

1.2.3/css/styles.css रूप में एक ही फ़ाइल की सेवा करता है क्योंकि पहली निर्देशिका छीनती है और htaccess फ़ाइल द्वारा उपेक्षा की जाती है

संस्करण फ़ाइलें शामिल हैं

 <?php $version = "1.2.3"; ?> <html> <head> <meta http-equiv="cache-control" content="max-age=0" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="expires" content="0" /> <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" /> <meta http-equiv="pragma" content="no-cache" /> <link rel="stylesheet" type="text/css" href="<?php echo $version ?>/css/styles.css"> </head> <body> <script src="<?php echo $version ?>/js/main.js"></script> </body> </html> 

ध्यान दें कि इस दृष्टिकोण का मतलब है कि आपको अपने अनुक्रमणिका पृष्ठ के कैशिंग को अक्षम करना होगा – सभी ब्राउज़रों में कैशिंग को बंद करने के लिए <मेटा> टैग का उपयोग करना है?

.htaccess फ़ाइल

 RewriteEngine On # if you're requesting a file that exists, do nothing RewriteCond %{REQUEST_FILENAME} !-f # likewise if a directory that exists, do nothing RewriteCond %{REQUEST_FILENAME} !-d # otherwise, rewrite foo/bar/baz to bar/baz - ignore the first directory RewriteRule ^[^/]+/(.+)$ $1 [L] 

आप किसी भी सर्वर प्लेटफ़ॉर्म पर उसी दृष्टिकोण को ले सकते हैं जो url rewriting की अनुमति देता है

( mod_rewrite से अनुकूलित फिर से लिखना शर्त – निर्देशिका को फिर से लिखकर स्ट्रिंग क्वेरी को छोड़कर / #! / )

… और अगर आपको अपने अनुक्रमणिका पृष्ठ / साइट एंट्री बिंदु के लिए कैश पर्दाफाश की ज़रूरत है, तो आप इसे फिर से ताज़ा करने के लिए JavaSript का उपयोग कर सकते हैं।

 <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> 

कैश करने के लिए यूआरएल के अंत में कुछ यादृच्छिक संख्या का प्रयोग करें जैसे नीचे दिया गया है

 <script type="text/javascript" language="JavaScript"> ord=Math.random()*10000000000000000; </script> 

और ब्राउज़र ऐसा कुछ बनाता है,

 http://ad.doubleclick.net/ABC/publisher/zone;topic=abc;sbtpc=def;cat=ghi;kw=xyz;tile=1;slot=728x90.1;sz=728x90;ord=7268140825331981? 

अधिक विवरण यहाँ ।