2013-01-16 29 views
6

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

<link href="http://mysite.com/main.css?v=1" rel="stylesheet" /> 

, जब भी आप अपने सीएसएस में कोई परिवर्तन करने के लिए, बस संस्करण संख्या तक सामने लाना:

उत्तर

10

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

उदाहरण के लिए:

<script type="text/javascript" src="include/232/init.js"></script> 

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

<script type="text/javascript" src="include/init.js?232"></script> 

मुद्दा यह है कि जब आप फ़ाइल बदलना चाहिए है यूआरआई शामिल:

वैकल्पिक रूप से, आप क्वेरी स्ट्रिंग का उपयोग कर सकते हैं।

आप PHP या किसी अन्य सर्वर साइड भाषा का उपयोग करते हैं, आप सेटअप इस संस्करण स्वचालित रूप से पाए जाते हैं कर सकते हैं जब भी अपनी फ़ाइल संशोधित कर रहे हैं शामिल हैं: यह चारों ओर पाने के लिए http://derek.io/blog/2009/auto-versioning-javascript-and-css-files/

3

आप संपत्ति यूआरएल के लिए डमी क्वेरी स्ट्रिंग जोड़ सकते हैं।

इस तकनीक को कैश बस्टिंग कहा जाता है। Search Google for that, और आपको कई अलग-अलग बदलाव मिलेंगे।

2

एक चाल किसी तरह के साथ एक क्वेरी स्ट्रिंग संलग्न करने के लिए है अपने link जावास्क्रिप्ट कॉल के लिए संस्करण या टाइमस्टैम्प का। उदाहरण के लिए:

<script src="myexternal.js?20130116" type="text/javascript"></script> 

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

2

आप अपने ग्राहक के ब्राउज़र का कैश साफ़ नहीं कर सकते, लेकिन आप इस तरह अपनी फ़ाइलें

<link rel="stylesheet" href="/css/example.css?v1.0" type="text/css" /> 

और करने के लिए संस्करण के रूप में जोड़ने कैश बस्टिंग तकनीक का उपयोग कर सकते हैं तो जब आप कोई परिवर्तन करते

<link rel="stylesheet" href="/css/example.css?v1.1" type="text/css" /> 

यह एक टाइमस्टैम्प या जो कुछ भी हो सकता है, बस अलग होना चाहिए।

1

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

$jsFile = '/js/myFile.js';    // probably cached 
$jsFile = '/js/myFile.js?r='.time();  // won't ever be cached 

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

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

1

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

इसे करने का सबसे आसान तरीका: यूआरएल js/my-script.js?v=1.0 के अंत में एक संस्करण संख्या का उपयोग करें।

इसे करने का बेहतर तरीका (सभी नेविगेटर के लिए 100% समर्थित): फ़ाइल नाम को js/my-script.v1.0.js बदलें।

+0

पहला 100% क्यों समर्थित नहीं है? – Ian

+0

ऐसा लगता है कि स्थैतिक संसाधनों पर एक क्वेरी स्ट्रिंग जोड़ना [कुछ प्रॉक्सी पर कैशिंग रोकना] (http://www.mikebrittain.com/blog/2009/06/11/caching-urls-with-query-strings/)। हम उस समय के कैश किए गए फ़ाइल संस्करण को साफ़ करने में सक्षम होना चाहते हैं, कैशिंग तंत्र को पूरी तरह से रोकें। हालांकि, यदि आप एक प्रदर्शन गुरु नहीं हैं, तो पहला समाधान बहुत अच्छा है। यह वर्डप्रेस विषयों के लिए इस्तेमाल किया जाता है। –

+0

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