कैश अक्षम होने के बावजूद कोड फ़ाइलों में परिवर्तन को अनदेखा क्यों किया जा रहा है?


14

मैं अपने लोकलहोस्ट (विंडोज 7, क्रोम v79.0.3945.130 (64-बिट)) पर एक html / js कोड का परीक्षण करता हूं और लगभग 50% समय कोड परिवर्तन ब्राउज़र में परिलक्षित नहीं होते हैं (मैं इसे देव टूल्स / स्रोतों से देखता हूं) )।
इंटरनेट पर एक टन सलाह है, लेकिन न तो काम करने के लिए लगता है:

  • रीलोड पर राइट क्लिक करें और "खाली कैश और हार्ड लोड" चुना - 30% मामलों में मदद नहीं करता है।
  • Chrome देव टूल के नेटवर्क टैब में कैश अक्षम करें - मदद नहीं करता है।
  • <meta http-equiv="Cache-control" content="no-cache">हेडर में जोड़ें - मदद नहीं करता है।
  • <script src="common.js"></script>द्वारा प्रतिस्थापित <script src="common.js?blabla"></script>- 60% मामलों में मदद करता है, लेकिन हर बदलाव के बाद आपको इसे करने की आवश्यकता होती है। इसके अलावा, यह html परिवर्तनों के साथ काम नहीं करता है।
  • फ़ाइल को एक नई फ़ाइल (जैसे index.html से index2.html) पर कॉपी करें और फ़ाइल नाम को कोड में बदलें - हमेशा काम करता है, लेकिन यह एक और भी बड़ा काम है।

जब मैं github.io को कोड देता हूं तो वही समस्या उपस्थित होती है

कृपया इसे बनाने में मेरी मदद करें ताकि साइट तुरंत कोड परिवर्तन को दर्शाए।


संपादित करें: मैंने एक फ़ाइल index3.html बनाया है और वहां केवल "हैलो वर्ल्ड" रखा है। ब्राउज़र में फ़ाइल को खोला। "हैलो वर्ल्ड 2" में परिवर्तित - ब्राउज़र ने सामग्री को अपडेट किया। "हैलो वर्ल्ड 3" में बदल गया - ब्राउज़र अभी भी "हेल्लो वर्ल्ड 2" दिखा रहा था, भले ही कई रील और "खाली कैश और हार्ड रील" के बाद भी। मैं "हैलो वर्ल्ड 4" में बदल गया - ब्राउज़र ने अभी भी "हैलो वर्ल्ड 2" दिखाया। 4 घंटे के लिए मैं "हैलो वर्ल्ड 5" में बदल गया - ब्राउज़र अभी भी "हैलो वर्ल्ड 2" दिखाता है। इस फाइल को मैंने बेसिक नोटपैड से एडिट किया।


Edit2: लोग पूछते रहते हैं कि मैं किस सर्वर का उपयोग कर रहा हूं। यह समस्या का एक हिस्सा जैसा दिखता है। दुर्भाग्य से, मुझे नहीं पता है और न ही मुझे पता है कि मुझे इसे जांचने के लिए वास्तव में क्या करने की आवश्यकता है। यहाँ मैं अब तक पता चला है:

  • मेरे पास inetpub/wwwrootनिर्देशिका है जहां मैंने html & js फाइलें रखी हैं और फिर एक ब्राउज़र में index.html खोलें http://localhost/
  • देव टूल्स में मेरा नेटवर्क पैनल इस तरह दिखता है: छवि लिंक
  • सर्वर सेटअप बहुत तेज़ था और इसे स्थापित करने के लिए किसी अतिरिक्त सॉफ़्टवेयर की आवश्यकता नहीं थी। यानी मैं node.js. का उपयोग नहीं कर रहा हूँ
  • वहाँ iisstart.htm है inetpub/wwwrootऔर जब मैं http://localhost/iisstart.htmइसे खोलता हूँ तो IIS7 कहते हैं।

मैं कभी-कभी कैश को क्रोम देव टूल्स में अक्षम कर देता हूं + फिर से कैश को फिर से सक्षम करना + ताज़ा करना कभी-कभी समस्या को ठीक करता है? एक शॉट के लायक हो सकता है ...
Nick Parsons

2
आप किस प्रकार के सर्वर का उपयोग कर रहे हैं?
झेख्त

@ जेकट मैं इसकी जाँच कैसे करूँ?
klm123

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

1
@ klm123 यह जाने बिना कि यह किस वेब सर्वर के बारे में है, यह आपको बता पाना असंभव है कि इसके लिए कैशे कॉन्फिगर को कैसे बदलें या चेक करें। यदि आपको अपने वेब सर्वर के बारे में कोई पता नहीं है, तो इसकी जांच करने का एक संभावित तरीका devTools के नेटवर्क टैब में है: index.htmlकिसी हेडर X-Powered-Byया किसी Serverहेडर की तरह लोड किए गए रिस्पॉन्स हेडर की जांच करें, जो वेब सर्वर पर संकेत दे सकता है। अपने फ़ाइल पथ के लिए Googling inetpub/wwwrootदृढ़ता से एक IIS सर्वर को इंगित करता है।
acran

जवाबों:


6

एक पैरामीटर का उपयोग करना सही तरीका है! यहां आप एक संस्करण संख्या जोड़ सकते हैं जिसे आप केवल बड़े परिवर्तनों पर मैन्युअल रूप से बदल सकते हैं और डिबगिंग के लिए आप इसे Date.time () पर सेट कर सकते हैं ताकि आपके <head> टैग में, यह सभी कैश्ड संस्करणों को अधिलेखित होने के लिए मजबूर कर दे क्योंकि पैरामीटर हमेशा एक नया होता है एक:

< script type="text/javascript"> 
    var script = document.createElement('script'); 
    var version = Date.time();
    script.src = "common.js?v="+version; 
    document.head.appendChild(script) 
< /script>

उम्मीद है की यह मदद करेगा!


मुझे लगता है कि मैं यह कर सकता हूं। लेकिन क्या यह मेरे चौथे विकल्प के समान प्रभावी नहीं है? फ़ाइल नाम के बाद "ब्लाबला" जोड़ने के लिए। यह अक्सर काम नहीं करता है - यह स्रोत टैब में या तो एक ही फ़ाइल नाम है, या ब्लाब्ला जोड़ा जाता है, लेकिन फ़ाइल की सामग्री अभी भी समान है।
klm123

यह वैसा नहीं है। एक बार एक पैरामीटर का उपयोग दो बार किया जाता है (जो कि Date.time के साथ कभी नहीं होगा) यह एक कैश्ड संस्करण को प्रस्तुत कर सकता है। ब्लाबला एक ही बार उपयोग करने के बाद दो बार उपयोग करने के समान है।
lehm.ro

पैरामीटर का उपयोग दो बार नहीं किया जाता है। मैं कोड संपादित करता हूं, फिर पैरामीटर बदलता हूं, फिर ब्राउज़र में स्रोत कोड की जांच करता हूं और यह पुराना है।
klm123

क्या आपने मेरे दृष्टिकोण की कोशिश की है?
lehm.ro

आपका दृष्टिकोण मदद करता है, धन्यवाद। लेकिन यह मेरी समस्या का समाधान नहीं करता है। आपने जो लिखा है वह मेरी स्थिति में सही नहीं है। "सभी कैश्ड संस्करणों को अधिलेखित होने के लिए मजबूर करता है क्योंकि पैरामीटर हमेशा एक नया होता है", पैरामीटर को एक नए में बदलना मेरे कैश को मज़बूती से पुनः लोड करने के लिए मजबूर नहीं करता है। इसके अलावा यह index.html में परिवर्तन के साथ मदद नहीं कर सकता।
klm123

3

IIS7 में विंडोज सर्वर विंडोज 7 पर चल रहा है, आपकी सामग्री के कैशिंग को रोकने के लिए, आपको अपनी एक विन्यास फाइल में कुछ बदलाव करने की जरूरत है web.config। आईआईएस 7 और बाद के लिए विन्यास फाइल में स्थित हैं %WinDir%\System32\Inetsrv\Config folderजहां %WinDir%फ़ोल्डर है जहाँ आप Windows (आमतौर पर स्थापित है C:/Windows)।

web.configइसे संपादित करने से पहले अपनी फ़ाइल की एक बैकअप प्रतिलिपि बनाएँ ताकि आप इसे रोलबैक कर सकें यदि आप फ़ाइल में जो बदलाव करेंगे, वह इसे तोड़ देगा।

अपनी web.configफ़ाइल में, अपने कैशिंग को रोकने के लिए बस निम्नलिखित जोड़ें index.html:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <location path="index.html">
    <system.webServer>
      <httpProtocol>
        <customHeaders>
          <add name="Cache-Control" value="no-cache" />
        </customHeaders>
      </httpProtocol>
    </system.webServer>
  </location>

</configuration>

web.configयहां से फ़ाइल के लिए फ़ाइल पथ प्राप्त करें: Windows Doc: कॉन्फ़िगरेशन संदर्भ

यहां से ऊपर कैश के लिए कॉन्फ़िगरेशन प्राप्त करें: IIS के माध्यम से दी गई एकल पृष्ठ एप्लिकेशन HTML फ़ाइल के कैशिंग को कैसे अक्षम करें?


उल्लेखित मार्ग पर कोई web.config नहीं है। मैंने इसे बनाया है और अपना कोड वहां रखा है। लेकिन मुझे index.html को पूर्ण पथ द्वारा प्रतिस्थापित करना था projectName/index.html, जिसे मैं अपने ब्राउज़र में url से कॉपी करता हूं http:/localhost/projectName/index.html। परिणाम - कैशिंग समस्या पर कोई प्रभाव नहीं।
klm123

@ kim123 क्या आप web.configअपनी साइट के रूट फ़ोल्डर में फ़ाइल को जोड़ने का प्रयास कर सकते हैं (फ़ोल्डर जहां आपकी साइट है) इसके बजाय और बस वापस पथ बदलकर index.htmlदेखें कि क्या काम करता है।
एंड्रयूएल 64

मैंने किया। यह मदद नहीं करता है।
klm123

1

मुझे भी यही समस्या थी और यह मेरी चेकलिस्ट है:

  1. चेक web.config (कैशिंग और clientcache, कर्नेल कैश नीति आदि) या .htaccess (हैडर सेट कैश-नियंत्रण)।
  2. यदि आपने एएसपी, पीएचपी जैसी गतिशील भाषाओं का उपयोग किया है तो आंतरिक कैश सेटिंग हो सकती है। एक मामले में मैंने <%Response.Expires=1440%>एएसपी कोड की कई लाइनों के भीतर पाया और यह अन्य सभी सेटिंग्स पर काबू पा रहा था! Php में session_cache_expireभी ऐसा ही हो सकता है।
  3. यदि आप IIS का उपयोग कर रहे हैं, तो सर्वर > HTTP रिस्पांस हेडर की जांच करें यह सुनिश्चित करने के लिए कि सर्वर नाम के तहत सूचीबद्ध व्यक्तिगत वेबसाइटों के लिए भी कैशिंग के बारे में कुछ भी नहीं है।
  4. http-equiv="Cache-control"html हेडर में जांच करें (आपने यह परीक्षा उत्तीर्ण कर ली है!)।

अंत में मुझे यह कहना है कि ऊपर की सभी स्थितियों में, Chrome कंसोल में न्यूटवर्क टैब में डिसएबल कैश की जांच करना हमेशा मेरे लिए पृष्ठों का एक ताज़ा संस्करण देखने के लिए काम करता है, लेकिन यह केवल डिबगिंग उद्देश्यों के लिए अच्छा है और विज़िटर ऐसा नहीं करते हैं!


1. मुझे web.config और .htaccess कहां मिलेंगे? 2. मैं केवल html और js का उपयोग करता हूं। 3. HTTP रिस्पांस हेडर इस तरह दिखता है: imgur.com/leYpdej
klm123

यदि आप IIS का उपयोग कर रहे हैं web.congfig रूट ot wwwroot में है। इसके अलावा सर्वर स्तर में Machine.config फ़ाइल है जिसे आप इसे सीधे IIS IIS कंसोल से संशोधित कर सकते हैं: stackoverflow.com/questions/2325473/where-is-machine-config । यदि आप खिड़कियों पर अपाचे सर्वर का उपयोग कर रहे हैं, तो कृपया विंडोज को खोजने के लिए सीराच करें। kacm123
अली शेखपुर

0

Google Chrome का उपयोग करने वाले विशिष्ट मामले में, यह प्रयास करें: देव उपकरण खोलें -> 'नेटवर्क' टैब पर जाएं। 'कैश अक्षम करें' चेकबॉक्स को चेक करें, उसके बाद पेज को रिफ्रेश करें।

नोट: इसके लिए हर समय काम करने के लिए देव टूल्स की खिड़की का हर समय खुला रहना आवश्यक है।

यहां छवि विवरण दर्ज करें

हालाँकि, अपने उपयोगकर्ताओं को परिवर्तनों को प्रचारित करने के लिए, उन्हें पृष्ठ को हार्ड रिफ्रेश किए बिना, आदि के लिए, आपको बार-बार बदलने वाली फ़ाइलों के लिए प्रत्येक संदर्भित फ़ाइल के अंत में फ़ाइल संस्करणों को जोड़ना होगा (जैसा आपने बताया)। उदाहरण के लिए:

<link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/stackoverflow/primary.css?v=20b379f72a37" >

v=20b379f72a37अंत में जोड़ा फ़ाइल की सामग्री की एक स्वत: जनरेट फ़ाइल हैश है।


आइटम 2 मेरी सूची में।
klm123

क्या आप यह सुनिश्चित कर रहे हैं कि देव उपकरण की खिड़की खुली रहे?
मार्टिन शिशकोव

देव उपकरण विंडो खुली हुई है, चेक बॉक्स की जाँच की गई है [लेकिन मैं आमतौर पर स्रोत टैब को देखता हूं], और मैं भी मुश्किल ताज़ा करता हूं।
klm123

0

यह एक लंबा शॉट है - लेकिन आप किस तरह के संपादक / आईडीई का उपयोग कर रहे हैं? इसके अलावा, आप अपने index.html में किस प्रकार के संपादन कर रहे हैं?

क्या आप ऐसे संपादन के कुछ उदाहरण प्रदान कर सकते हैं जो फ़ाइल सहेजने और सहेजने का प्रयास करते समय परिलक्षित नहीं होते हैं?

मैं आपके मुद्दे को पुन: पेश करने का प्रयास करना चाहता हूं। लोग जो सुझाव दे रहे हैं, उससे यह नहीं लगता कि समस्या कोड के भीतर ही है। मुझे संदेह है कि यह एक पर्यावरणीय मुद्दा है लेकिन मुझे अपने संदेह की पुष्टि करने के लिए आपसे अधिक जानकारी की आवश्यकता होगी।


मैं Microsoft दृश्य स्टूडियो कोड का उपयोग करता हूं। उदाहरण: <script src = "common.js"> </ script> को <script src = "common.js? Blabla"> से बदलें। Example2: एक नया बटन जोड़ें, एक नया div जोड़ें, ऑनलोड फ़ंक्शन कॉल जोड़ें। Tbh यह किसी भी तरह के संपादन की तरह दिखता है।
klm123

मेरे प्रश्न पोस्ट के अंत में संपादन देखें।
klm123

0

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

समाधान अच्छी तरह से वर्णित हैं: https://curtistimson.co.uk/post/front-end-dev/what-is-cache-busting/

मैं फ़ाइल के अंतिम अद्यतन की तारीख के साथ संस्करण को स्क्रिप्ट में जोड़ने के लिए सर्वर की तरफ पसंद करता हूं।

<script src="/myScript.js?v=1579780745150"></script>

कहाँ 1579780745150 यूनिक्स टाइमस्टैम्प अद्यतन करता है myScript.js ही फाइल। यह केवल अपनी फाइलों के साथ काम करता है, लेकिन बाहरी लोगों की जरूरत नहीं है। फ़ाइल नाम में सबसे अधिक बार संस्करण है।


यदि आपको बैकएंड का कोड चाहिए। मुझे बताएं कि आपने किस प्लेटफॉर्म का इस्तेमाल किया है।
Aleksandr Smityukh

0

यह वास्तव में निराशा होती है, और यह ध्वनि नहीं करता है जैसे आप कुछ भी गलत कर रहे हैं।

समस्या यह है कि आपके ब्राउज़र और स्क्रिप्ट फ़ाइल के बीच कुछ आप कैशिंग कर रहे हैं।

यह निर्धारित करने के लिए कि यह क्या है, मुझे पूछना है कि आप लोकलहोस्ट यूआरएल पर कैसे ब्राउज़ कर रहे हैं?

उदाहरण:

file://path/to/file.html
http://localhost/file.html
http://127.0.0.1/file.html
http://[machine's-hostname]/file.html
http://[custom-domain-defined-in-hosts-file]/file.html

यदि आप इसे चला रहे हैं तो file://path/to/file.htmlइसका मतलब है कि आप वेब सर्वर / प्रॉक्सी के माध्यम से ब्राउज़ नहीं कर रहे हैं। अगर ऐसा है http://[something]/file.htmlतो आप किसी तरह का वेब सर्वर चला रहे हैं और इसकी संभावना है। किसी प्रकार की सेटिंग देखें जहां आप कैशिंग बंद कर सकते हैं।

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


यह वह जगह है http://localhost/ProjectName/index.htmlजहाँ यह सेटिंग जहाँ आप कैशिंग बंद कर सकते हैं?
klm123

ऐसा लगता है कि आपके द्वारा कहीं और पोस्ट किए गए स्क्रीन शॉट से, आप IIS (जिसे Microsoft की इंटरनेट सूचना सेवा भी कहा जाता है) का उपयोग कर रहे हैं। एक त्वरित समाधान यह है कि आप ब्राउज़र में इसे लोड करने के लिए अपनी .html फ़ाइल पर बस डबल-क्लिक करें, जो a का उपयोग करेगा file://path/to/projectName/index.html। वह वेब सर्वर को समीकरण से हटा देगा। IIS का उपयोग जारी रखने के लिए और बस कैश को ठीक करने के लिए, इस लेख को देखें: support.microsoft.com/en-us/help/247404/…
डीन हाउसहोल्डर

0

Chrome यह बात करता है कि, यदि फ़ाइल बहुत अधिक नहीं बदली गई है, तो निश्चित नहीं है कि इसका क्या मतलब है, यह "संकलित" कैश संस्करण का उपयोग करेगा। Html के लिए इसका मतलब है दान का पेड़। JS के लिए precompiled कोड आदि।

आमतौर पर इसे संबोधित करने के तरीके हैं, कई फ्रेम फाइल के अंदर हैश का उपयोग करते हैं, जैसे: main.md5hash.jsक्योंकि फ़ाइल नाम बदलना किसी भी कैश को अमान्य करता है।

तब आप संभवतः अद्यतन नहीं कर रहे हैं html के साथ छोड़ दिया जाएगा। और स्पष्ट होने के लिए, मुझे यकीन नहीं है, आप हमेशा यादृच्छिक ब्लॉब के साथ टिप्पणी जोड़ सकते हैं ... एक तारीख की तरह।


0

आपके उत्तर के अद्यतनों के आधार पर, मैं कहूंगा कि आपका मुद्दा IIS v7 के कारण है कि यह आपके पीसी मेमोरी का उपयोग करता है न कि आप स्थानीय हार्ड ड्राइव को कैशिंग करने के लिए Hard reloadऔर यही कारण है कि अन्य सभी विधि ठीक से काम नहीं करती हैं।

मैं 3 समाधान के बारे में सोच सकता है:

1. अपने IIS कैश समस्या को ठीक करना: (इस तथ्य के कारण परीक्षण नहीं किया गया कि मेरे पास IIS वाला पीसी नहीं है)

  1. से प्रारंभ मेनू, क्लिक करें व्यवस्थापकीय उपकरण , और फिर क्लिक करें इंटरनेट सूचना सेवा (आईआईएस) प्रबंधक। ( चित्र देखें )
  2. में पेड़ पर दृश्य बाईं ओर , आपके आवेदन पाते हैं।
  3. आउटपुट कैशिंग मेनू आइटम का चयन करें ।
  4. पर क्लिक करें Add Cache Rule फिर उस फाइल को टाइप करें extensionजिसे आप उन पर कैश को निष्क्रिय करना चाहते हैं .aspx, जैसे .css, .js आदि ... (एक बार मैं अनुमान लगाता हूं?)
  5. अब, आप या तो आप अचयनित कर सकते हैं उपयोगकर्ता के मोड कैशिंग या जाँच करें सभी कैशिंग को रोकने के। यह इस तरह दिखना चाहिए:

यहां छवि विवरण दर्ज करें

समाधान स्रोत - इसके बारे में और पढ़ें IIS 7 कैश के


2. IIS के लिए कुछ विकल्पों का उपयोग करना काफी कुछ है, लेकिन मैं सुझाव दूंगा (मेरे अनुभवों के आधार पर) WAMP या XAMPP दोनों आपको एक बेहतर विकास "वातावरण" देंगे और दोनों विंडोज 7 का समर्थन करते हैं। इसके अलावा, यदि आप परिचित हैं वीएस कोड आप सिर्फ लाइव सर्वर का उपयोग कर सकते हैं एक्सटेंशन का ।


3. विकसित करते समय Chrome गुप्त मोड का उपयोग करें । (यह सुनिश्चित नहीं है कि यह IIS7 के लिए काम करता है)


कैश नियम जोड़ें / सभी कैशिंग रोकें - मदद नहीं करता [html के साथ की कोशिश की]। गुप्त मोड - मदद नहीं करता है।
klm123

क्या आपने .jsफ़ाइलों के साथ प्रयास किया है? यह इस बात पर निर्भर करता है कि आप क्या बदलाव कर रहे हैं।
जागरण
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.