मैं ब्राउज़र को सीएसएस और जावास्क्रिप्ट परिवर्तन कैसे देख सकता हूं?

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


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

     

आपके लिए इसे स्वचालित करने के लिए एसवीएन संशोधन संख्या का उपयोग कर सकते हैं: एएसपी.नेट डिस्प्ले एसवीएन संशोधन संख्या

क्या आप निर्दिष्ट कर सकते हैं कि आप संशोधन एक और फाइल का चर? यह HTML फ़ाइल में है, जिसमें मैं URL में संशोधन संख्या को सीएसएस या जावास्क्रिप्ट फ़ाइल में शामिल कर सकता हूं।

सबवर्जन पुस्तक में यह संशोधन के बारे में कहता है: "यह कीवर्ड अंतिम ज्ञात संशोधन का वर्णन करता है जिसमें यह फ़ाइल बदल गई है भंडार "।

फ़ायरफ़ॉक्स किसी विशेष पृष्ठ पर सब कुछ पुनः लोड करने के लिए CTRL + R दबाकर भी अनुमति देता है।

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

0
जोड़ा संपादित
विचारों: 1

5 उत्तर

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

<script type="text/javascript" src="funkycode.js?v1">

आप इस आपके लिए को स्वचालित करने के लिए एसवीएन संशोधन संख्या का उपयोग कर सकते हैं पिछली चेंजडिविजन आपकी HTML फ़ाइल में जहां v1 ऊपर दिखाई देता है। ऐसा करने के लिए आपको अपना भंडार भी सेट करना होगा।

मुझे उम्मीद है कि यह मेरे जवाब को और स्पष्ट करेगा?

फ़ायरफ़ॉक्स किसी विशेष पृष्ठ पर सब कुछ पुनः लोड करने के लिए CTRL + R दबाकर भी अनुमति देता है।

0
जोड़ा

मैंने पाया कि यदि आप यूआरएल के अंत में फ़ाइल के अंतिम संशोधित टाइमस्टैम्प को जोड़ते हैं तो ब्राउज़र संशोधित होने पर फ़ाइलों का अनुरोध करेगा। उदाहरण के लिए PHP में:

function urlmtime($url) {
   $parsed_url = parse_url($url);
   $path = $parsed_url['path'];

   if ($path[0] == "/") {
       $filename = $_SERVER['DOCUMENT_ROOT'] . "/" . $path;
   } else {
       $filename = $path;
   }

   if (!file_exists($filename)) {
       // If not a file then use the current time
       $lastModified = date('YmdHis');
   } else {
       $lastModified = date('YmdHis', filemtime($filename));
   }

   if (strpos($url, '?') === false) {
       $url .= '?ts=' . $lastModified;
   } else {
       $url .= '&ts=' . $lastModified;
   }

   return $url;
}

function include_css($css_url, $media='all') {
   // According to Yahoo, using link allows for progressive 
   // rendering in IE where as @import url($css_url) does not
   echo '<link rel="stylesheet" type="text/css" media="' .
        $media . '" href="' . urlmtime($css_url) . '">'."\n";
}

function include_javascript($javascript_url) {
   echo '<script type="text/javascript" src="' . urlmtime($javascript_url) .
        '"></script>'."\n";
}
0
जोड़ा
@benmsia, क्या आपने सीएसएस फ़ाइल का अनुरोध करते समय HTTP हेडर वापस लौटाए हैं?
जोड़ा लेखक grom, स्रोत
हाय ग्रोम, मैंने इस विधि की कोशिश की है। हालांकि, मुझे पता चला कि एक बार जब मैं पैरामीटर शामिल करता हूं तो ब्राउजर ने सीएसएस फ़ाइल को कैश नहीं किया। जब भी मैं इसे कैश किए बिना पृष्ठ पर फिर से जाता हूं तो यह सीएसएस फ़ाइल लोड करता है। मुझे यह पता लगाने के लिए सीएसएस फ़ाइल में परिवर्तन करने के द्वारा यह पता चला कि ब्राउज़र द्वारा सीएसएस फ़ाइल कैश की गई है या नहीं। मैं क्रोम का उपयोग कर रहा हूँ। क्या मुझे पता चलेगा कि ब्राउज़र को सीएसएस फ़ाइल कैश करने और पैरामीटर में परिवर्तन के दौरान ही लोड करना है? धन्यवाद।
जोड़ा लेखक davidlee, स्रोत

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

0
जोड़ा

मैं यह भी सोच रहा था कि यह कैसे किया जाए, जब मुझे ग्रोम का जवाब मिला। कोड के लिए धन्यवाद।

मैं समझने के साथ संघर्ष कर रहा था कि कोड का उपयोग कैसे किया जाना चाहिए था। (मैं एक संस्करण नियंत्रण प्रणाली का उपयोग नहीं करता हूं।) संक्षेप में, जब आप स्टाइलशीट को कॉल करते हैं तो आप टाइमस्टैम्प (टीएस) शामिल करते हैं। आप अक्सर स्टाइलशीट को बदलने की योजना नहीं बना रहे हैं:

<?php 
    include ('grom_file.php');
    // timestamp on the filename has to be updated manually
    include_css('_stylesheets/style.css?ts=20080912162813', 'all');
?>
0
जोड़ा
?? include_css फ़ंक्शन यूआरएल के अंत में फ़ाइल पर अंतिम संशोधित टाइमस्टैंप जोड़ देगा। कोई संस्करण नियंत्रण आवश्यक है।
जोड़ा लेखक grom, स्रोत

जब आप अपने सीएसएस या जेएस पुस्तकालयों का एक नया संस्करण जारी करते हैं, तो निम्न होने का कारण बनता है:

  1. एक अद्वितीय संस्करण स्ट्रिंग को शामिल करने के लिए फ़ाइल नाम को संशोधित करें
  2. HTML फ़ाइलों को संशोधित करें जो लाइब्रेरी को संस्करण फ़ाइल पर इंगित करने के लिए संदर्भित करते हैं

(यह आमतौर पर रिलीज स्क्रिप्ट के लिए एक बहुत ही साधारण मामला है)

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

यह उपयोगकर्ता के कुछ भी आवश्यक किए बिना कैशिंग व्यवहार का कारण बनता है।

0
जोड़ा