एक संस्करण जोड़ें जो इंगित करता है कि स्थिर फ़ाइल का कैश किया गया पुराना संस्करण उपयोग किए जाने से बचने के लिए अप-टू-डेट है

पेज निर्माण की तारीख :

चूंकि सामने का चरण लंबा है, यदि आप केवल कार्यक्रम देखना चाहते हैं, तो कृपया इसे छोड़ दें।

पर्यावरण

विजुअल स्टूडियो
  • विजुअल स्टूडियो 2019
ASP.NET कोर
  • 3.1 (रेजर पेज, एमवीसी)

वेब पेजों पर फ़ाइलों को कैश करने के बारे में

जब आप किसी वेब पेज पर जाते हैं, तो एचटीएमएल के अलावा, .js फाइल्स (जावास्क्रिप्ट), .css फाइल्स (स्टाइलशीट) और इमेज फाइल्स को डिस्प्ले और एक्मेंटेशन के लिए क्लाइंट को डाउनलोड किया जाता है। हालांकि, कुछ इमेज फाइलें बड़ी हैं, और उन्हें हर बार डाउनलोड करना महंगा हो सकता है। इसके अलावा, .js फाइलों और .css फाइलों का उपयोग अक्सर अन्य पृष्ठों पर किया जाता है, और हर बार उन्हें डाउनलोड करने की आवश्यकता नहीं होती है। इन फ़ाइलों को डाउनलोड करने के बाद आपके ब्राउज़र में अस्थायी रूप से सहेजा जा सकता है। इसे कैशिंग कहते हैं।

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

कैशिंग के कारण होने वाली समस्याएं

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

निम्नलिखित एक फ़ाइल पथ का एक उदाहरण है। href और एसआरसी के गुण पैरामीटर लागू होते हैं।

<!-- スタイルシート (.css) -->
<link rel="stylesheet" href="/css/site.css" />

<!-- 画像ファイル -->
<img src="/image/sample.png" alt="サンプル画像" />

<!-- JavaScript (.js) -->
<script src="/js/site.js"></script>

हालांकि, यह व्यवहार एक समस्या हो सकती है।

उदाहरण के लिए, अगर किसी यूजर के पास पहली बार एक्सेस करते समय वर्जन 1 जावास्क्रिप्ट फाइल है, तो वर्जन 1 जावास्क्रिप्ट फाइल कैश हो गया है । इसके बाद सर्वर संस्करण 2 जावास्क्रिप्ट फाइल प्रकाशित करता है। यदि जावास्क्रिप्ट फ़ाइल पथ एक ही था जब उपयोगकर्ता ने एक ही पृष्ठ पर दौरा किया, तो सर्वर संस्करण 2 जावास्क्रिप्ट फ़ाइल डाउनलोड किए बिना संस्करण 1 जावास्क्रिप्ट फ़ाइल कैश किया जा सकता है। इससे वे दोष पैदा हो सकते हैं, जिनका जनता इरादा नहीं करती ।

इस समय, मुझे लगता है कि आप अक्सर उपयोगकर्ता पक्ष पर प्रतिउपायों में से एक के रूप में "कैश को हटाने की कोशिश" देखते हैं, लेकिन यह कारण हो सकता है।

सर्वर की ओर कैश की समस्याओं से कैसे निपटें

जैसा कि ऊपर बताया गया है, कैश फ़ाइलों का उपयोग किया जाता है या नहीं, यह काफी हद तक फ़ाइल पथ (यूआरएल) पर निर्भर करता है।

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

उदाहरण के लिए, अगर कोई संस्करण 1 फ़ाइल है

<link rel="stylesheet" href="/css/site.css" />

जब फ़ाइल को संस्करण 2 अपडेट किया गया था

<link rel="stylesheet" href="/css/site2.css" />

साइट2 ग्राहक पक्ष पर .css है।

हालांकि, यदि आप इसे मैन्युअल रूप से करते हैं, तो यह रास्तों को बदलने और भौतिक फ़ाइलों का नाम बदलने के लिए बोझिल और त्रुटि-प्रवण हो सकता है।

फ़ाइल पथ पर क्वेरी पैरामीटर जोड़ें

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

क्वेरी मापदंडों को निम्नलिखित प्रारूप में पथ पर संलग्न किया जा सकता है:

<!-- クエリパラメータなし -->
<link rel="stylesheet" href="/css/site.css" />

<!-- クエリパラメータあり -->
<link rel="stylesheet" href="/css/site.css?key=value" />

इस तंत्र का उपयोग करके, आपको रास्ता बदलने की आवश्यकता है, लेकिन आपको भौतिक फ़ाइल का नाम बदलने की आवश्यकता नहीं है।

प्रोग्राम में क्वेरी पैरामीटर अपने आप जोड़ें (खराब उदाहरण)

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

एक आसान उदाहरण यह है कि जब कोई उपयोगकर्ता वेब पेज तक पहुंचता है तो क्वेरी मापदंडों में वर्तमान समय को जोड़ना होता है। यह बहुत आसान है क्योंकि मुझे लगता है कि आप किसी भी प्रोग्रामिंग भाषा में एक पंक्ति में लिख सकते हैं। मुझे लगता है कि पीढ़ी उदाहरण इस तरह दिखता है:

<link rel="stylesheet" href="/css/site.css?20210223120000" />

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

कोर में क्वेरी पैरामीटर जोड़कर ASP.NET संस्करण नियंत्रण

Al.क्योंकि कोई पूर्व ASP.NET कोर इस कैशिंग समस्या का एक मानक समाधान प्रदान करता है।

आपको बस उस टैग में एक विशेषता जोड़ने की आवश्यकता है जो फ़ाइल पथ का वर्णन asp-append-version="true" करता है:

<link rel="stylesheet" href="~/css/site.css" asp-append-version="true"/>
<img src="/image/sample.png" asp-append-version="true"/>
<script src="~/js/site.js" asp-append-version="true"></script>

यदि आप वास्तव में वेब पर प्रकाशित होने के बाद पृष्ठ पर जाते हैं, तो यह इस प्रकार विस्तार करेगा:

<link rel="stylesheet" href="/css/site.css?v=S2ihmzMFFc3FWmBWsR-NiddZWa8kbyaQYBx2FDkIoHs" />
<img src="/image/sample.png?v=Z0tUqQmLt_3L_NSzPmkbZKxL8cMxglf08BwWb5Od5z4" />
<script src="/js/site.js?v=dLGP40S79Xnx6GqUthRF6NWvjvhQ1nOvdVSwaNcgG18"></script>

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

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

asp-append-version="true"वैसे, यह विशेषता केवल wwwroot फ़ोल्डर में रखी गई स्थिर फ़ाइलों के लिए मानक है। ध्यान दें कि अन्य फ़ाइलों पर सेट होने पर यादृच्छिक तार का विस्तार नहीं किया जाता है।

नमूना कार्यक्रम के बारे में

साइट टेम्पलेट .js डिफॉल्ट प्रोजेक्ट asp-append-version टेम्पलेट। साइट.css में इससे कोई संलग्न नहीं asp-append-version है।

नमूना कार्यक्रम _Layout.cshtml फ़ाइल की साइट.js और साइट.css asp-append-version जोड़ता है। हम एक संदर्भ के रूप में आईएमजी टैग भी जोड़ रहे asp-append-version हैं।