IIS7 पर MVC3 का उपयोग करते समय मैं gzip संपीड़न कैसे सक्षम करूं?


100

किसी को भी MVC 3 में gzip संपीड़न को सक्षम करने के लिए कैसे पता है? मैं IIS7 का उपयोग कर रहा हूं।

Google Chrome ऑडिट का परिणाम:

  1. गज़िप संपीड़न सक्षम करें (4)
  2. Gzip के साथ निम्नलिखित संसाधनों को संपीड़ित करने से उनके हस्तांतरण का आकार लगभग दो तिहाई कम हो सकता है (~ 92.23KB):
  3. / mydomain / बचा सकता है ~ 1.53KB
  4. jquery-1.4.4.min.js ~ 51.35KB बचा सकता है
  5. Cufon.js ~ 11.89KB बचा सकता है
  6. Futura.js ~ 27.46KB बचा सकता है

एक डुप्लीकेट को शांत न करें: stackoverflow.com/q/552317/712526
jpaugh

जवाबों:


143

आप web.configनिम्नानुसार अपनी फ़ाइल के माध्यम से संपीड़न को कॉन्फ़िगर कर सकते हैं:

<system.webServer>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>

आप iis.net/ConfigReference पर इस कॉन्फ़िगरेशन तत्व के दस्तावेज़ पा सकते हैं । यह इसके बराबर है:

  1. इंटरनेट सूचना सेवा (IIS प्रबंधक) खोलना
  2. बाईं ओर ट्री-व्यू के माध्यम से नेविगेट करना जब तक आप उस आभासी निर्देशिका तक नहीं पहुंच जाते जिसे आप संशोधित करना चाहते हैं
  3. उपयुक्त आभासी निर्देशिका का चयन करना ताकि दाहिने हाथ के फलक का शीर्षक उक्त आभासी निर्देशिका का नाम बन जाए।
  4. दाहिने हाथ के फलक में "IIS" के तहत "संपीड़न" चुनना
  5. दोनों विकल्पों को टिकाना और "एक्ट्स" के तहत "दाईं ओर" का चयन करना।

नोट: (जैसा कि टिप्पणियों में बताया गया है) आपको यह सुनिश्चित करने की आवश्यकता है कि Http डायनेमिक संपीड़न स्थापित है अन्यथा सेटिंग doDynamicCompression="true"का कोई प्रभाव नहीं होगा। ऐसा करने का सबसे तेज़ तरीका है:

  1. प्रारंभ> प्रकार optionalfeatures(यह "विंडो सुविधाओं को चालू या बंद करने के लिए" विंडो का सबसे तेज़ तरीका है)
  2. इंटरनेट सूचना सेवाओं पर नेविगेट करें> वर्ल्ड वाइड वेब सर्विसेज> "विंडोज फीचर्स" ट्रीव्यू में प्रदर्शन सुविधाएँ
  3. सुनिश्चित करें कि "डायनामिक कंटेंट कम्प्रेशन" टिक गया है
  4. "ओके" पर क्लिक करें और प्रतीक्षा करें कि विंडोज घटक स्थापित करता है

11
यह ध्यान देने योग्य है कि आपको काम करने के लिए Http संपीड़न डायनेमिक IIS विकल्प स्थापित करने की आवश्यकता है। इस उत्तर में विन्यास संदर्भ लिंक में विवरण है।
कालेब वियर

16
Windows Server 2008 पर optionalfeaturesमेरे लिए काम नहीं किया। इसके बजाय, सर्वर प्रबंधक> भूमिकाएँ> वेब सर्वर (आईआईएस) पर स्क्रॉल करें> रोल सेवाएँ जोड़ें पर क्लिक करें। अब सुनिश्चित करें कि वेब सर्वर> प्रदर्शन> स्टेटिक सामग्री संपीड़न और गतिशील सामग्री संपीड़न स्थापित हैं।
रोरी

1
ध्यान रखें कि यह आपके "वैरी:" होस्ट हेडर को गड़बड़ कर सकता है। अधिक जानकारी: stackoverflow.com/questions/5372052/…
jjxtra

2
कम से कम मेरे अनुभव में यह सब कुछ MVC कंट्रोलर्स के आउटपुट को संपीड़ित करता है। वे किसी भी कारण से बिना किसी gzip संपीड़न के HTML लौटाते हैं।
क्रिस मोशिनि

1
सावधान !!! IIS डायनेमिक संपीड़न वैरी हेडर, इसकी बग या सुविधा से अलग हो जाता है, मुझे नहीं पता, लेकिन कस्टम फ़िल्टर लागू करने से अधिक समझ में आता है यदि आप चाहते हैं कि कैश सही तरीके से काम करे।
आकाश काव

31

यदि आप ऐसा करते हैं तो आप कोड में ऐसा कर सकते हैं। मैं एक बेसकंट्रोलर बनाऊंगा जो कि प्रत्येक नियंत्रण से विरासत में मिलता है और इसे नीचे इस विशेषता के साथ सजाता है।

public class CompressAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
        if (string.IsNullOrEmpty(encodingsAccepted)) return;

        encodingsAccepted = encodingsAccepted.ToLowerInvariant();
        var response = filterContext.HttpContext.Response;

        if (encodingsAccepted.Contains("deflate"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
        else if (encodingsAccepted.Contains("gzip"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
    }
}

2
@JustAnotherUserYouMayKnow - इस बात पर निर्भर करता है कि आप अपने संसाधनों की सेवा कैसे कर रहे हैं; यदि आप सर्वर पर फ़ाइलों पर सीधे इंगित कर रहे हैं, तो नहीं, हालांकि यदि आप उन्हें कार्यों के माध्यम से सेवा करते हैं (जैसा कि हमारे संसाधन प्रबंधन प्रणाली हमें अनुमति देती है) तो यह शानदार ढंग से काम करता है। BTW रिक Strahl ने यह जाँचने के लिए अद्यतन किया है कि ग्राहक वास्तव में संकुचित करने से पहले gzip का समर्थन करता है
पॉल कैरोल

4
ध्यान दें कि पुनर्निर्देशित करने के लिए यह filterअशक्त होने से बचाने के लिए महत्वपूर्ण है । मैंने इस्तेमाल किया var response = ...;if( response == null || response.Filter == null)return;
ट्रैविस जे

2
इसके अलावा, आप इसके gzipबजाय पहले का उपयोग करना चाहते हैं deflate, यहाँ और अधिक पढ़ सकते हैं: stackoverflow.com/a/9856879/1026459
ट्रैविस जे

IIS संपीड़ित फ़ाइलों को कैश करता है, इसलिए बेहतर प्रदर्शन के लिए उन्हें फिर से संपीड़ित नहीं करना पड़ेगा। IIS का उपयोग करें यदि आप कर सकते हैं और केवल इस दृष्टिकोण का उपयोग करें यदि IIS संपीड़न आपके लिए उपलब्ध नहीं है।
मुहम्मद रेहान सईद

1
MVC5, IIS 8.5, .net 4.5 लोकलहोस्ट पर काम कर रहे इन समाधानों में से कोई भी नहीं। मुझे क्या करना चाहिए, कोई सुझाव?
अनादि १२

12

सर्वर के स्तर पर संपीड़न सक्षम / अक्षम है। आईआईएस प्रबंधन कंसोल में IIS संपीड़न मॉड्यूल देखें।

यहाँ Microsoft साइट से IIS के लिए निर्देश दिए गए हैं ।


1
YOu इसे web.config में भी सेट कर सकते हैं
जैक मार्केटी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.