सबसे अच्छा नगीनेक्स संपीड़न गज़िप स्तर क्या है?


44

मैं gzip सक्षम के साथ nginx रिवर्स प्रॉक्सी कैश का उपयोग कर रहा हूं। हालाँकि, मुझे एंड्रॉइड एप्लिकेशन HTTP-रिक्वेस्ट से मेरी रेल JSON वेब सेवा से कुछ समस्याएं मिलीं। ऐसा लगता है कि जब मैं रिवर्स प्रॉक्सी कैश को बंद करता हूं, तो यह ठीक काम करता है क्योंकि प्रतिक्रिया शीर्षलेख बिना 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;

जवाबों:


18

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

ऐसा लगता है कि आपके मुद्दे अनुरोधों पर HTTP हेडर से अधिक संबंधित हैं। आमतौर पर गज़िप-संकुचित HTTP ट्रैफ़िक Content-Encoding: gzipहेडर के साथ होता है । यदि यह कहीं गिराया जा रहा है, तो ग्राहक को प्रतिक्रिया को विघटित करने के लिए पता नहीं हो सकता है।


क्लाइंट से http अनुरोध शीर्ष लेख का उपयोग करके gzip प्रतिक्रिया को कैसे अक्षम करें? मैं स्वीकार-एनकोडिंग की कोशिश करता हूं: '', लेकिन यह काम नहीं करता है।
चामनाप

RFC2616 ( w3.org/Protocols/rfc2616/rfc2616-sec14.html ) से मुझे लगता है कि आप केवल 'स्वीकार-एनकोडिंग:' चाहते हैं, जिसका कुछ भी अनुसरण नहीं है।
उगना

हाँ, मैंने हेडर स्वीकार-एन्कोडिंग को रिक्त स्ट्रिंग के साथ मोज़िला पर पोस्टर एडन के साथ जोड़ा, और सामग्री-एन्कोडिंग के बिना प्रतिक्रिया वापस: 'गज़िप'। हालाँकि, एंड्रॉइड ऐप पर, यह हमेशा gzip में वापस आता है। मैंने जांच की कि प्रॉक्सी कैश निर्देशिकाओं में क्या कैश किया गया है, nginx gzip सामग्री को कैश करता है, इसलिए यह शायद gzip में प्रतिक्रियाएं हैं। इसे कैसे हल करें?
चमनप

कुछ स्रोतों का सुझाव है कि संपीड़न स्तर बढ़ने के कारण अपघटन संसाधन नहीं बढ़ते हैं। संसाधनों में वास्तव में कुछ मामलों में कमी आती है क्योंकि संपीड़न स्तर बढ़ता है। stackoverflow.com/questions/28452429/…
user2208096

90

मैंने इसे दो फाइलों के साथ 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;
}

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


यह वेबलॉग .asp.net / owscott / iis-7- compression- good-bad-how-much पर परिणामों के साथ प्रदर्शित होता है, जो 5 और 6 के बाद संपीड़न स्तरों में बड़ी गिरावट दिखाते हैं
जेफ एटवुड

6

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

संपादित करें: मैंने Amazon CloudFront को देखा और ऐसा लगता है कि यह स्तर 6 का उपयोग कर रहा है, शायद इसलिए कि स्तर एक है जो तेजी से विघटन चलाता है, इस प्रकार पेज रेंडर प्रदर्शन में सुधार होता है।


यह सही नहीं है
कैलम्ब्रोडी

2
क्लाउड आप बताते हैं कि उसके बारे में क्या गलत है? वैसे भी, मैंने जवाब को अपडेट किया, मैंने थोड़ा और शोध किया और मैं देखता हूं कि अमेज़ॅन क्लाउडफ़ॉर्म जैसी साइटें 6 के संपीड़न स्तर का उपयोग करती हैं, शायद इसलिए कि यह विघटन की गति के बारे में सबसे अच्छा है (इस प्रकार पृष्ठ तेजी से लोड होंगे)।
डिएगोG

1) 2 और 6 के बीच का अंतर गैर तुच्छ है, यह 10-15% तक हो सकता है, डेटा को देखें या इसे स्वयं आज़माएं। 2) संपीड़न का स्तर
डिकम्प्रेस

0

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

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


मैं आपके सुझाव का उपयोग करना चाहता हूं, लेकिन मैंने वर्तमान comp_levelमें अपने कॉन्फ़िगरेशन में शामिल नहीं किया है , इसलिए मैं यह नहीं बता सकता कि मैं वर्तमान में किस स्तर पर हूं। क्या आप जानते हैं कि चूक क्या है? स्रोत?
हसन बेग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.