2012-06-29 19 views
5

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

क्या इससे बचने का कोई आम तरीका है?

संपादित करें: मैं एएसपी.NET 4.0 पर चल रहा हूं।

उत्तर

6

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

<link media="all" href="myhomepage.css?sid=1" type="text/css" rel="stylesheet"> 

जब आप परिवर्तन करते हैं तो सिड वैल्यू बदल जाता है।

+2

मैं इस विधि को स्वीकार करता हूं! –

+0

मैं नहीं करता, क्योंकि यह हमेशा काम नहीं करता है, और बहुत मैनुअल है! मेरा जवाब देखें! –

+1

@RichBradshaw आपकी विधि के अपने संभावित मुद्दे हैं, जैसे प्रत्येक पृष्ठदृश्य पर फाइल सिस्टम पर कॉल करना। उदाहरण के लिए 'sid' एक चर होने के कारण, यह कम मैन्युअल बनाना पूरी तरह से संभव है। – ceejayoz

0

मैं अपाचे में पीएचपी साथ निम्नलिखित का उपयोग करें:

function cssInclude($file) { 
    $fileMTime = filemtime($_SERVER['DOCUMENT_ROOT']."/media/css/".$file.".css"); 
    return "<link rel=\"stylesheet\" href=\"/media/css/{$file}.{$fileMTime}.css\" 
} 
तो में

मेरी <head>:

<?= cssInclude("style"); ?> 

तब मेरे .htaccess में:

RewriteEngine on 
RewriteRule ^media/(js|css|img|font)/(.+)\.(\d+)\.(js|css|png|jpg|gif)$ /media/$1/$2.$4 [L] 

अनिवार्य रूप से यह क्या करता है लिंक में समय है। मूल रूप से मैंने इसे सीएसएस के बाद किया था, जैसा कि style.css?12313123 में पाया गया था, लेकिन पाया कि कुछ प्रॉक्सी ने कैश नहीं किया क्योंकि उन्हें लगता है कि यह गतिशील था, इसे धीमा कर रहा था (मेरे काम ने इसे उदाहरण के लिए गड़बड़ कर दिया)।

इसे style.123123123.css के रूप में लिखकर ऐसा लगता है जैसे यह संशोधित होने पर एक नई फ़ाइल है, और कैशिंग ठीक काम करता है।

आप देखेंगे कि मेरे .htaccess में मैं खुद को अलग-अलग निर्देशिकाओं के लिए ऐसा करने की अनुमति देता हूं, और कुछ अलग-अलग फ़ाइल प्रारूपों के लिए - इसे आवश्यकतानुसार अनुकूलित करें।

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

1

बेशक मैं आपका सेटअप नहीं जानता, क्योंकि आप इसका जिक्र नहीं करते हैं, लेकिन मानते हैं कि आपके पास टोमकैट जैसे सेरलेट कंटेनर हैं, तो आपको Jawr पर एक नज़र डालने की सलाह दी जाएगी। इसका उद्देश्य, वेब साइट से: 'जवार जावास्क्रिप्ट और सीएसएस के लिए एक ट्यूनेबल पैकेजिंग समाधान है ...

यह आपके द्वारा मांगी गई चीज़ों से कहीं अधिक कर सकता है, लेकिन यह @ स्क्रैपडकोला के विचार को पूरी तरह से स्वचालित रूप से लागू करता है। ग्राहकों को एक यूआरएल दिखाई देगा जिसमें सामग्री का हैश (scripts_A5F68E2.js जैसे कुछ) जिसमें अनंत काल तक कैशिंग के लिए गुण हैं। जब भी सामग्री बदलती है, तो नाम भी बदलता है, इसलिए क्लाइंट स्क्रिप्ट को फिर से लोड करेगा।

+0

मैंने अपने प्लेटफ़ॉर्म (एएसपी.नेट 4.0) के साथ प्रश्न अपडेट किया है। –

1

सबसे पहले यह आपके द्वारा लोड किए जाने वाले संसाधनों में एक संस्करण जोड़ने के लिए सामान्य प्रथा है। यह एक संस्करण-पैरामीटर या yawr जैसे ढांचे का उपयोग करके किया जा सकता है।

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

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

मैं आपके सेटअप की अनुपलब्धता के रूप में उदाहरण कोड पेस्ट नहीं करता हूं।

+0

मैंने अपने प्लेटफ़ॉर्म (एएसपी.नेट 4) के साथ प्रश्न अपडेट किया है। –

+0

फिर मैं असेंबली संस्करण का उपयोग करने की सिफारिश करता हूं। आपको केवल अपने विचारों में इसका उपयोग करना होगा। – modebm

संबंधित मुद्दे