2012-06-26 8 views
10

मैं एमवीसी 4 में बंडलिंग और माइनिफिकेशन सपोर्ट को कार्यान्वित कर रहा हूं और ऐसा प्रतीत होता है कि यह मेरी जावास्क्रिप्ट फाइलों को बड़ा कर रहा है अगर वे बंडल/मिनीफाई नहीं किए गए थे। मैं नवीनतम निर्माण का उपयोग कर रहा हूं nuget (प्री-रिलीज विकल्प) पर उपलब्ध है। मेरे पास मेरे रजिस्टरबंडल क्लास में निम्न बंडल स्थापित है।एमवीसी 4 बंडलिंग और मिनीफिकेशन क्यों मेरी फाइलें बड़ा कर रहा है?

bundles.Add(new ScriptBundle("~/bundles/baseJS").Include(
        "~/Scripts/jquery-1.7.1.js", 
        "~/Scripts/jquery.cookie.js", 
        "~/Scripts/jquery-ui-1.8.11.js", 
        "~/Scripts/bootstrap.js", 
        "~/Scripts/jquery.pjax.js", 
        "~/Scripts/kendo/2012.1.515/js/kendo.all.min.js", 
        "~/Scripts/jquery.jstree.js", 
        "~/Scripts/jquery.unobtrusive-ajax.js", 
        "~/Scripts/jquery.validate.js", 
        "~/Scripts/jquery.validate.unobtrusive.js", 
        "~/RIS.Scripts/PostJson.js")); 

और मैं

@Scripts.Render("~/bundles/baseJS") 

उपयोग करते हुए मेरे _Layout.cshtml में लोड हो रहा है कर रहा हूँ जब मैं डिबग मोड में ये स्क्रिप्ट के लिए फ़िडलर में प्राप्त बाइट्स को जोड़ने मैं निम्नलिखित मिल

Name      Size(bytes) 
jquery      98013 
jquery cookie    1455 
jquery ui     124704 
bootstrap     52378 
pjax      8138 
kendo.all     219751 
jstree      55045 
unobtrusive-ajax   2492 
validate     13323 
validate-unobtrusive  5138 
postjson     634 

Total      581071 

और जब मैं इसे अपने उत्पादन सर्वर पर चलाता हूं तो मुझे पूरे जेएस बंडल के लिए फिडलर से निम्नलिखित मिलता है।

Bytes Received: 999,396  

यहां क्या हो रहा है? अधिकांश फ़ाइलों को कुछ हद तक छोटा कर दिया जाता है, लेकिन यह मेरे पेलोड के आकार को लगभग दोगुना नहीं करना चाहिए।

अतिरिक्त विवरण- जब मैं अपने स्थानीय देव बॉक्स (फिडलर ने आकार 37 9 केबी) की जेएस फाइलें डाउनलोड की हैं और सर्वर (फिडलर ने 999 केबी आकार की सूचना दी है) और उन्हें केडीएफ में डाल दिया है, तो वे बाइनरी समान हैं। जब मैं क्रोम के डेवलपर टूल नेटवर्क टैब में देखता हूं, तो स्थानीय सर्वर 37 9 केबी डाउनलोड करता है, लेकिन 'पार्सर' मान 975 केबी है। यह पार्सर मूल्य क्या है। क्या यह हो सकता है कि कुछ आईआईएस संपीड़न सेटिंग है जो मेरे सर्वर में सेट नहीं है लेकिन मेरे स्थानीय आईआईएस सर्वर पर है? एकमात्र अंतर जो मैं नोट करता हूं वह यह तथ्य है कि आईआईएस एक्सप्रेस मैं अपनी देव मशीन पर चल रहा हूं 8.0 है जहां सर्वर आईआईएस 7.5 है।

उत्तर

12

सबसे अधिक संभावना क्या आप यहाँ देख रहे हैं डिबग/रिलीज 'जादू' है कि FileExtensionReplacementList से आता है में से कुछ है।

उदाहरण के लिए jQuery लेते हैं। आम तौर पर आपकी स्क्रिप्ट फ़ोल्डर में आप प्रत्येक फ़ाइल की दो प्रतियां देखेंगे, यानी jquery-1.6.2.js और jquery-1.6.2.min.js। के बाद से आम तौर पर आसान (कोई बंडलिंग और बंडल का कोई minification) डिबगिंग करता है कि

डिफ़ॉल्ट अनुकूलन करके, min.js संस्करण जब debug=false उपयोग करें, और का उपयोग नियमित रूप से jquery-1.6.2.js जब debug=true होगा।

यह फ़ाइल चयन 'जादू' के माध्यम से BundleCollection पर नियंत्रित किया जाता है।

अगली फिल्म (RTM) में, वहाँ इस सूची में थोड़ा अधिक स्पष्टता हो जाएगा, के रूप में आम तौर पर डेवलपर्स मैं पहली बार इस कोशिश करता हूँ, कर रहे हैं जब इन इस्तेमाल किया जाना चाहिए लक्षित करना चाहते हैं जाएगा यानी

list.Add("min", OptimizationMode.WhenEnabled); 
list.Add("debug", OptimizationMode.WhenDisabled); 
+0

सक्षम करने के लिए डिबग या रिलीज तर्क को ओवरराइड करता है नोट: हाओ एएसपी.NET – RickAndMSFT

+2

के लिए बंडल/मिनीफिकेशन पर मुख्य डेवलपर है यदि मैं सही ढंग से उत्तर समझता हूं तो मुझे लगता है कि मेरा प्रश्न है एएसपीनेट की तुलना में जेक्री का खनन कड़ा है? – PlTaylor

4

आपके पास बंडलिंग विकल्प काम कर रहा है, लेकिन minification BundleTable.EnableOptimizations = true सेटिंग और कुछ "ट्रांसफॉर्म" विकल्पों द्वारा किया जाता है जिन्हें आपने व्यस्त नहीं किया है। CssMinify और JsMinify देखें।

की तर्ज पर

कुछ:

 var b1 =new ScriptBundle("~/bundles/jquery").Include(
       "~/Scripts/jquery-1.*"); 

     b1.Transforms.Add(new JsMinify()); 

     bundles.Add(b1); 

- और -

BundleTable.EnableOptimizations = true;  
+0

सुबह की बात .... लेकिन यह इसे बड़ा क्यों कर देगा? यही वह हिस्सा है जो वास्तव में मुझे भ्रमित कर रहा है। – PlTaylor

+0

आप b1.transforms.Add के बारे में सही हैं (नया JsMinify()); जो मेरी समस्या को हल करता है और कुल डाउनलोड गैर-मिनीफाइड फ़ाइलों के योग से कम है। EnableOptimizations = सत्य; बस डीबगिंग बंद कर देता है और बंडल करता है और सर्वर पर आपके स्थानीय देव बॉक्स पर सबकुछ कम करता है। – PlTaylor

+0

ठीक है जब मैंने इसे अपने dev बॉक्स पर EnableOptimizations = true के साथ चलाया; यह जेएस फ़ाइल को 388,447 बाइट्स में बंडल और छोटा कर देता है जो कि मैं अपेक्षा करता हूं। जब मैं अपने सर्वर पर इसे कोड कोड के साथ तैनात करता हूं तो यह 999,350 बाइट्स होता है। यह कैसे हो सकता है? – PlTaylor

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