2011-11-22 13 views
15

यदि मैं जावास्क्रिप्ट या सीएसएस फ़ाइल के last_modified_time का उपयोग करने का निर्णय लेता हूं, और फ़ाइल के संशोधित होने पर कैश को बस्ट करने के लिए नाम में एक कुंजी के रूप में यूनिक्स टाइमस्टैम्प का उपयोग करें। निम्नलिखित दो प्रथाओं के बीच क्या अंतर है? फ़ाइल नाम है: my_script.js और टाइमस्टैम्प है: <script type="text/javascript" src="http://example.com/js/my_script.js?v=1321951817"></script> इसलिए, क्वेरी स्ट्रिंग पैरामीटर एक नया कैश हर v बदल गया है बनाता है: के रूप में 1321951817कैशिंग से बचने के लिए जावास्क्रिप्ट संस्करण, इन प्रथाओं में अंतर?

1/फ़ाइल शामिल हो जाता है।

2/फ़ाइल के रूप में शामिल हो जाता है: एक और विधि के नीचे उत्तरों के आधार पर: <script type="text/javascript" src="http://example.com/js/my_script.1321951817.js"></script> हर संशोधन के साथ फ़ाइल नाम परिवर्तन, रीराइट नियम टाइमस्टैम्प और अंक अनुरोध किया गया URL my_script.js

3/अद्यतन करने के लिए निकालता है: फ़ाइल का नाम बदला गया है और इसमें शामिल किया गया है: <script type="text/javascript" src="http://example.com/js/my_script.1321951817.js"></script> फ़ाइल नाम बदल दिया गया है और कोई भी रिवाइट नियम उपयोग नहीं किया जाता है।

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

+1

आप फ़ाइल नामों के बजाय पथ नामों के साथ विधि 2 का भी उपयोग कर सकते हैं: 'http: // example.com/v-1321951817/js/my_script.js'। – user123444555621

उत्तर

22

एक अद्यतन क्वेरीस्ट्रिंग का उपयोग करना एक खराब समाधान है। देखें कि स्टीव सॉउडर ने इसके बारे में क्या कहा है: http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/

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

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

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

मैं इसके लिए एक बिल्ड सिस्टम का उपयोग करने की सिफारिश कर सकता हूं, क्योंकि यह वर्कफ़्लो तेजी से उबाऊ हो जाता है। मेरी कंपनी ने कुछ समय पहले सोर्स किया था जो आपके वेब पेज को अनुकूलित करने वाली कई अन्य चीजों में से एक है: https://github.com/One-com/assetgraph-builder ऐसे कई अन्य निर्माण उपकरण हैं जो ऐसा करते हैं। चारों ओर एक नज़र डालें और उस व्यक्ति को ढूंढें जो आपके विकास सेटअप के लिए उपयुक्त है।

+0

"आदर्श विधि फ़ाइल का नाम बदलना है।" यह एक पुनर्लेखन नियम से बेहतर क्यों होगा? – user123444555621

+3

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

6

आप इसे स्वयं कह रहे हैं: दूसरे उदाहरण में आप एक पुनर्लेखन नियम का उपयोग कर रहे हैं जो आपके द्वारा लोड किए जा रहे प्रत्येक पृष्ठ को रेगेक्स के साथ जांचता है।

पहला व्यक्ति यह सोचने के लिए ब्राउज़र को मूर्ख बना रहा है कि यह एक अलग फ़ाइल है। तो पहला रास्ता जाने का रास्ता है।

+1

मैं मानता हूं, पहला विकल्प जाने का रास्ता है। – kamui

+0

@baklap वहां आपके बिंदु से सहमत हैं। लेकिन मेरी वर्जनिंग स्क्रिप्ट फ़ाइल का नाम बदलती है, और कोई पुनर्लेखन नियमों का उपयोग नहीं किया जाता है। तो बेहतर क्या है? – DhruvPathak