14

मैं अपने एएसपी.नेट एमवीसी 3 वेब अनुप्रयोग में नई एएसपी.NET बंडलिंग सुविधाओं (System.Web.Optmization 1.0.0-बीटा प्री-रिलीज का उपयोग करके) के साथ मिल रहा हूं।नई एएसपी.नेट बंडलिंग विशेषताएं - मैं एक निश्चित बंडल को प्रोग्रामेटिक रीफ्रेश कैसे कर सकता हूं?

अच्छा काम करता है।

हालांकि, हमारे पास कुछ गतिशील सीएसएस/जेएस डेटाबेस में संग्रहीत है।

मैं इसे अपने मूल बंडल के लिए एक अलग बंडल में जोड़ना चाहता हूं, "डायनामिकबंडल" कहें। मुझे पता है कि यह कैसे करना है, कोई समस्या नहीं।

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

अनिवार्य रूप से, मुझे उस जादू ग्रिड/स्ट्रिंग को फिर से उत्पन्न करने के लिए ASP.NET की आवश्यकता है जो बंडल यूआरएल में संलग्न है।

आदर्श रूप में, मैं केवल विशिष्ट बंडल रीफ्रेश करना चाहता हूं, न कि संपूर्ण बंडल तालिका।

क्या ऐसा करने का कोई तरीका है?

संपादित करें:

ठीक है दूसरी समस्या, बंडल करने के लिए गतिशील सीएसएस/जे एस जोड़ने का तरीका समझ नहीं सकता। bundle.AddFile फ़ाइल के लिए वर्चुअल पथ लेता है, लेकिन यह एक भौतिक फ़ाइल नहीं है, यह एक स्ट्रिंग है। मैं यह कैसे करने जा रहा हूँ? निश्चित रूप से मुझे पहले फाइलों में स्ट्रिंग लिखना नहीं है?

संपादित 2: तो मैंने फैसला किया है कि मेरी गतिशील सामग्री को बंडल न करें। 2 कारणों के लिए:

  1. यह केवल 1 फ़ाइल है, तो मैं किसी भी "बंडलिंग" प्राप्त नहीं कर रहा हूँ लाभ
  2. बंडलिंग स्थैतिक सामग्री के लिए डिज़ाइन किया गया है, इस

तो नहीं है मैं क्या है किया गया है मैन्युअल रूप से रनटाइम पर मेरे गतिशील सीएसएस/जेएस को छोटा कर दिया गया है (एक बार, फिर कैश किया गया)। कैश को साफ़ करके, मैं इसे आसानी से रीफ्रेश कर सकता हूं।

कहा जा रहा है, यह अभी भी एक प्रासंगिक सवाल (बंडलों ताज़ा) है तो मैं इसे खोलने के लिए छोड़ देंगे ..

+0

एक कस्टम हैंडलर जैसा लगता है जो गतिशील जेएस/सीएसएस को थकाता है आपके लिए बेहतर हो सकता है। इस प्रकार कुछ अन्य इंजन जो रनटाइम काम पर जेएस उत्पन्न करते हैं (उदाहरण के लिए, Ajax.NET Pro यह करता है: http://ajaxpro.codeplex.com/)। आप वैकल्पिक रूप से एक साधारण .aspx पृष्ठ का उपयोग कर सकते हैं जो गतिशील सामग्री देता है, और कैश हेडर को कैश करने के लिए सेट करता है ताकि ग्राहक हर बार अनुरोध कर सके। – nothingisnecessary

उत्तर

5

कि "कि जादू GUID/स्ट्रिंग" संयुक्त फ़ाइल सामग्री की एक हैश है।

आप निम्न वर्कफ़्लो के साथ इसका परीक्षण कर सकते हैं जो मानता है कि आपके पास mybundle.css है। आप यातायात को देखने के लिए फ़िडलर का उपयोग करते हैं, आप इसे की तरह

http://localhost:20206/mybundle.css?v=-6520265193368900210 

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

http://localhost:20206/mybundle.css?v=-6520265193368900210 

अगला, वास्तव में एक बदलाव करें।शायद 1px के बजाय एक सीमा को 2px पर सेट करें। हैश अब बदल जाएगा, क्योंकि हैश को खिलाने वाली सामग्री बदल गई है।

http://localhost:20206/mybundle.css?v=-4725541136976015445 

अंत में, सीमा को वापस उस पर सेट करें (उपरोक्त उदाहरण में, 1px पर वापस)। "जादू स्ट्रिंग" वास्तव में यादृच्छिक या जादू बिल्कुल नहीं है। इसके बजाए, यह सामग्रियों से गणना की गई मिलान एक-तरफा हैश पर वापस आती है।

http://localhost:20206/mybundle.css?v=-6520265193368900210 

अब आप आसानी से आराम कर सकते हैं कि हैश मैन्युअल हस्तक्षेप के बिना ही आवश्यक होगा।

अपने प्रश्न के दूसरे भाग के रूप में,

इस सीएसएस/जे एस डेटाबेस में बदल गया है, कि बंडल "ताजा" होने की जरूरत है जब इतना है कि उन फ़ाइलों की सामग्री रहे हैं फिर से पढ़ें बंडल में।

मुझे लगता है कि हम केवल सोच को उलट देते हैं। पुन: पढ़ने के लिए बंडल को रीफ्रेश करने के बजाय, हम रीफ्रेश ट्रिगर करने के लिए फ़ाइलों को अपडेट करते हैं। जब ASP.NET फ़ाइल को बदलता है, तो यह सामग्री को पुन: संयोजित करेगा और हैश अपडेट करेगा।

+1

मुझे पता है कि यह कैसे करें, लेकिन मैंने पूछा कि यह कैसे करें ** प्रोग्रामेटिक रूप से **। क्या आप सुझाव देते हैं कि मैं वास्तविक एप्लिकेशन कोड में फ़ाइल को "स्पर्श" करता हूं? E.g StreamWriter सामान? – RPM1984

+0

मेरे उत्तर का मुद्दा यह है कि आपको ऐसा करने की ज़रूरत नहीं है जो आपको लगता है कि आपको क्या करना है ... स्ट्रिंग "जादू" नहीं है। बंडल में जो कुछ भी शामिल है, यदि यह बदलता है, तो "जादू स्ट्रिंग" उन सामग्रियों के आधार पर अपडेट हो जाएगी। –

+0

एक स्पर्श पर्याप्त नहीं है, क्योंकि आपको वास्तव में सामग्री को बदलने की आवश्यकता है। डीबी से भौतिक फाइलों में परिवर्तित सामग्री को सहेजने के लिए आप 'StreamWriter' का उपयोग कर सकते हैं, इस स्थिति में हैश स्वयं का ख्याल रखेगा। –

3

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

इस समर्थन का लाभ उठाने के लिए, आपको अपने गतिशील जेएस/सीएसएस के लिए एक वीपीपी लागू करना होगा।

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

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

  • कोई संबंधित समस्या नहीं^_^