सवाल सबसे अच्छा nginx संपीड़न gzip स्तर क्या है?


मैं gzip सक्षम के साथ nginx रिवर्स प्रॉक्सी कैश का उपयोग कर रहा हूँ। हालांकि, मुझे एंड्रॉइड एप्लिकेशन से कुछ समस्याएं HTTP-अनुरोधों को मेरी रेल JSON वेब सेवा में मिलीं। ऐसा लगता है जब मैं रिवर्स प्रॉक्सी कैश बंद करता हूं, यह ठीक काम करता है क्योंकि प्रतिक्रिया हेडर gzip के बिना आता है। इसलिए, मुझे लगता है कि समस्या gzip के कारण होती है। Gzip संपीड़न का सबसे उचित स्तर क्या है?

gzip               on;
gzip_http_version  1.0;
gzip_vary          on;
gzip_comp_level    6;
gzip_proxied       any;
gzip_types         text/plain text/css text/javascript application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss;

37
2018-03-29 09:14


मूल




जवाब:


जीजीआईपी संपीड़न का स्तर बस यह निर्धारित करता है कि डेटा 1-9 से पैमाने पर संपीड़ित कैसे होता है, जहां 9 सबसे संकुचित होता है। व्यापार-बंद यह है कि सबसे संकुचित डेटा को आमतौर पर संपीड़ित / डिकंप्रेस करने के लिए सबसे अधिक काम की आवश्यकता होती है, इसलिए यदि आपने उच्च-वॉल्यूम वेबसाइट पर काफी अधिक सेट किया है, तो आप इसका प्रभाव महसूस कर सकते हैं।

ऐसा लगता है कि अनुरोधों पर HTTP शीर्षकों से आपके मुद्दे अधिक संबंधित हैं। आमतौर पर gzip- संपीड़ित HTTP यातायात के साथ है Content-Encoding: gzip हैडर। अगर इसे कहीं छोड़ दिया जा रहा है, तो ग्राहक को प्रतिक्रिया को कम करने के बारे में पता नहीं हो सकता है।


15
2018-03-29 09:22



क्लाइंट से http अनुरोध शीर्षलेख का उपयोग कर gzip प्रतिक्रिया को अक्षम कैसे करें? मैं स्वीकार करता हूं-एन्कोडिंग: '', लेकिन यह काम नहीं करता है। - Chamnap
आरएफसी 2616 से (w3.org/Protocols/rfc2616/rfc2616-sec14.html) मुझे लगता है कि आप केवल 'स्वीकार करें-एन्कोडिंग' चाहते हैं: कुछ भी नहीं। - growse
हाँ, मैंने मोज़िला पर पोस्टर एडन के साथ खाली स्ट्रिंग के साथ हेडर स्वीकृति-एन्कोडिंग जोड़ा, और सामग्री-एन्कोडिंग के बिना प्रतिक्रिया वापस: 'gzip'। हालांकि, एंड्रॉइड ऐप पर, यह हमेशा gzip में वापस आ जाता है। मैंने जांच की कि प्रॉक्सी कैश निर्देशिका में कैश किया गया है, nginx gzip सामग्री कैश करता है, इसलिए शायद यह gzip में वापस प्रतिक्रिया करता है। इसे कैसे हल करें? - Chamnap
कुछ स्रोत बताते हैं कि संपीड़न के स्तर में वृद्धि के रूप में डिकंप्रेशन संसाधनों में वृद्धि नहीं होती है। वास्तव में संसाधन कमी कुछ मामलों में संपीड़न स्तर बढ़ता है। stackoverflow.com/questions/28452429/... - user2208096


मैंने इसे दो फाइलों के साथ nginx 1.3.9 के तहत परीक्षण किया, और ये परिणाम मुझे विभिन्न स्तरों के लिए मिला:


text/html - phpinfo ():

0    55.38 KiB (100.00% of original size)
1    11.22 KiB ( 20.26% of original size)
2    10.89 KiB ( 19.66% of original size)
3    10.60 KiB ( 19.14% of original size)
4    10.17 KiB ( 18.36% of original size)
5     9.79 KiB ( 17.68% of original size)
6     9.62 KiB ( 17.37% of original size)
7     9.50 KiB ( 17.15% of original size)
8     9.45 KiB ( 17.06% of original size)
9     9.44 KiB ( 17.05% of original size)

application/x-javascript - jQuery 1.8.3 (असंपीड़ित):

0    261.46 KiB (100.00% of original size)
1     95.01 KiB ( 36.34% of original size)
2     90.60 KiB ( 34.65% of original size)
3     87.16 KiB ( 33.36% of original size)
4     81.89 KiB ( 31.32% of original size)
5     79.33 KiB ( 30.34% of original size)
6     78.04 KiB ( 29.85% of original size)
7     77.85 KiB ( 29.78% of original size)
8     77.74 KiB ( 29.73% of original size)
9     77.75 KiB ( 29.74% of original size)

मुझे यकीन नहीं है कि यह प्रतिनिधि कैसे है लेकिन इसे एक उदाहरण के रूप में कार्य करना चाहिए। इसके अलावा, मैंने सीपीयू उपयोग को ध्यान में नहीं लिया है लेकिन इन परिणामों से आदर्श संपीड़न स्तर बीच में प्रतीत होता है 4 तथा 6


इसके अतिरिक्त, यदि आप इसका उपयोग करते हैं gzip_static मॉड्यूल, आप अपनी फ़ाइलों को पूर्व-संपीड़ित करना चाहते हैं (PHP में):

function gzip_static($path)
{
    if ((extension_loaded('zlib') === true) && (is_file($path) === true))
    {
        $levels = array();
        $content = file_get_contents($path);

        foreach (range(1, 9) as $level)
        {
            $levels[$level] = strlen(gzencode($content, $level));
        }

        if ((count($levels = array_filter($levels)) > 0) && (min($levels) < strlen($content)))
        {
            if (file_put_contents($path . '.gz', gzencode($content, array_search(min($levels), $levels)), LOCK_EX) !== false)
            {
                return touch($path . '.gz', filemtime($path), fileatime($path));
            }
        }
    }

    return false;
}

यह आपको प्रत्येक अनुरोध पर सीपीयू को बलि किए बिना सर्वश्रेष्ठ संभव संपीड़न प्राप्त करने की अनुमति देता है।


77
2017-11-27 16:15



परिणाम के साथ इस जीब्स weblogs.asp.net/owscott/iis-7-compression-good-bad-how-much जो स्तर 5 और 6 के बाद संपीड़न स्तर में बड़ी गिरावट दिखाता है। - Jeff Atwood


यदि आप वास्तव में सीपीयू संसाधनों को छोड़ सकते हैं, तो आप 9 का उपयोग कर सकते हैं, लेकिन अधिकांश साइटों के लिए 2 का मान पर्याप्त है, क्योंकि gzip फ़ाइल 1 के बाद फ़ाइल को कम नहीं करता है।

संपादित करें: मैंने अमेज़ॅन क्लाउडफ्रंट को देखा और ऐसा लगता है कि यह स्तर 6 का उपयोग कर रहा है, शायद इसलिए कि वह स्तर वह है जो डिकंप्रेशन को तेजी से चलाता है, इस प्रकार पृष्ठ को प्रदर्शन प्रदान करता है।


6
2018-05-09 11:11



यह सही नहीं है - calumbrodie
क्लाउड आप समझाते हैं कि इसके बारे में क्या गलत है? वैसे भी, मैंने जवाब अपडेट किया, मैंने थोड़ा और शोध किया और मुझे लगता है कि अमेज़ॅन क्लाउडफ्रंट जैसी साइटें 6 का संपीड़न स्तर का उपयोग करती हैं, शायद इसलिए क्योंकि यह डिकंप्रेशन गति के बारे में सबसे अच्छी है (इस प्रकार पेज तेजी से लोड हो जाएंगे)। - DiegoG
1) 2 और 6 के बीच का अंतर गैर तुच्छ है, यह 10-15% तक हो सकता है, डेटा को देख सकता है या इसे स्वयं आज़मा सकता है। 2) संपीड़न का स्तर डिकंप्रेस करने में कठिनाई को प्रभावित नहीं करता है (देखें stackoverflow.com/questions/28452429/...) - calumbrodie


यदि आपके पास उच्च मात्रा वाली वेबसाइट है और अभी भी संपीड़न का पूर्ण स्तर (9) होना चाहते हैं, तो सबसे अच्छा विचार अमेज़ॅन एस 3 या इसी तरह की ऑब्जेक्ट स्टोरेज सेवाओं पर अपनी स्थिर सामग्री डालना होगा और संपीड़ित फ़ाइलों को अपलोड करना होगा।

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


0
2018-01-15 21:29



मैं आपके सुझाव का उपयोग करना चाहता हूं, लेकिन वर्तमान में मैंने इसमें शामिल नहीं किया है comp_level मेरी कॉन्फ़िगरेशन में, इसलिए मैं यह नहीं बता सकता कि मैं वर्तमान में किस स्तर पर हूं। क्या आप जानते हैं कि डिफ़ॉल्ट क्या हैं? स्रोत? - Hassan Baig