अपाचे द्वारा दी गई पाठ फ़ाइलों के लिए gzip के बजाय अपस्फीति का उपयोग क्यों करें?


215

HTML, css और javascript फाइलों के लिए LAMP सर्वर द्वारा दी जाने वाली विधि के क्या लाभ हैं। क्या बेहतर विकल्प हैं?

सर्वर Json का उपयोग करके एक मानचित्र एप्लिकेशन को जानकारी प्रदान करता है, इसलिए छोटी फ़ाइलों की एक उच्च मात्रा।

यह भी देखें कि क्या http कम्प्रेशन के लिए डिफाल्ट पर gzip चुनने में कोई प्रदर्शन शामिल है?


स्विच किए गए उत्तर स्वीकार किए जाते हैं ... वर्तमान आम सहमति गज़िप के पक्ष में दो से एक है
केन

1
mod_deflate Apache 2 के लिए है, mod_gzip Apache 1.3 के लिए है।
SPRBRN

जवाबों:


315

अपाचे द्वारा दी गई पाठ फ़ाइलों के लिए gzip के बजाय अपस्फीति का उपयोग क्यों करें?

सरल उत्तर नहीं है


RFC 2616 इस प्रकार परिभाषित करता है:

RFC 1951 में वर्णित "अपस्फीति" संपीड़न तंत्र के साथ संयोजन में RFC 1950 में परिभाषित "ज़ालिब" प्रारूप को परिभाषित करें

Zlib प्रारूप RFC 1950 में इस प्रकार परिभाषित किया गया है :

     0   1
     +---+---+
     |CMF|FLG|   (more-->)
     +---+---+

       0   1   2   3
     +---+---+---+---+
     |     DICTID    |   (more-->)
     +---+---+---+---+

     +=====================+---+---+---+---+
     |...compressed data...|    ADLER32    |
     +=====================+---+---+---+---+

तो, कुछ हेडर और एक ADLER32 चेकसम

RFC 2616 के रूप में gzip को परिभाषित करता है:

gzip RFC 1952 [25] में वर्णित फ़ाइल संपीड़न कार्यक्रम "gzip" (GNU ज़िप) द्वारा निर्मित एक एन्कोडिंग प्रारूप। यह प्रारूप 32 बिट सीआरसी के साथ एक लेम्पेल-ज़िव कोडिंग (LZ77) है।

RFC 1952 संकुचित डेटा को परिभाषित करता है:

वर्तमान में प्रारूप संपीड़न के DEFLATE विधि का उपयोग करता है लेकिन अन्य संपीड़न विधियों का उपयोग करने के लिए इसे आसानी से बढ़ाया जा सकता है।

CRC-32 ADLER32 की तुलना में धीमी है

समान लंबाई के चक्रीय अतिरेक जांच की तुलना में, यह गति के लिए विश्वसनीयता (बाद वाले को प्राथमिकता) देता है।

तो ... हमारे पास 2 संपीड़न तंत्र हैं जो संपीड़न के लिए समान एल्गोरिथ्म का उपयोग करते हैं , लेकिन हेडर और चेकसम के लिए एक अलग एल्गोरिथ्म।

अब, अंतर्निहित टीसीपी पैकेट पहले से ही बहुत विश्वसनीय हैं , इसलिए यहां मुद्दा एडलर 32 बनाम सीआरसी -32 नहीं है जो जीजेडआईपी उपयोग करता है।


पिछले कुछ वर्षों में कई ब्राउज़रों ने गलत डिफॉल्ट एल्गोरिथ्म लागू किया। RFC 1950 में zlib हैडर की अपेक्षा करने के बजाय उन्होंने बस संकुचित पेलोड की अपेक्षा की। इसी तरह विभिन्न वेब सर्वरों ने एक ही गलती की।

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

इस तरह के जटिल तर्क होने का परिणाम यह है कि यह अक्सर टूट जाता है। वर्व स्टूडियो में एक उपयोगकर्ता योगदान परीक्षण अनुभाग है जो बताता है कि स्थिति कितनी खराब है।

उदाहरण के लिए: सफारी 4.0 में काम करता है, लेकिन सफारी 5.1 में टूट गया है, यह भी हमेशा IE पर मुद्दों है।


तो, सबसे अच्छी बात यह है कि पूरी तरह से अवहेलना से बचें, मामूली गति को बढ़ावा देने (एडलर 32 के कारण) टूटी पेलोड के जोखिम के लायक नहीं है।


वहाँ एक नया मानक नहीं होना चाहिए जो gzip के साथ adler32 को जोड़ता है?
पचेरियर

1
@ सॅम केसर, इसका मतलब है कि अगर वेब ब्राउजर तस्वीर में नहीं है, तो मैं गज़िप पर डिफॉल्ट का उपयोग कर सकता हूं? उदाहरण के लिए, यदि मैं अपने FTP सर्वर पर एक संपीड़ित फ़ाइल अपलोड करने जा रहा हूं।
Xegara

1
एक और बहुत मामूली अंतर यह है कि zlib आवरण छह बाइट्स बनाम 18 बाइट्स गज़िप के लिए है। बहुत छोटे पैकेट के लिए, 12 कम बाइट भेजने का एक फायदा हो सकता है। हालांकि निष्कर्ष नहीं बदलता है, जो यह है कि माइक्रोसॉफ्ट ने इसे गलत तरीके से सभी के लिए खराब कर दिया है कि "डिस्लेट" का क्या मतलब है जो उन्होंने अपने आईआईएस सर्वर पर दिया था, यह सिर्फ गज़िप प्रारूप का उपयोग करना आसान है।
मार्क एडलर

लेकिन संभवतः पेलोड को कैसे तोड़ा जा सकता है, अगर यह टीसीपी का उपयोग करके प्रसारित किया जाता है? टीसीपी का पूरा विचार अटूट पेलोड को संचारित करना है।
user1095108

यह उत्तर तारीख 2012 से है। तो क्या आधुनिक ब्राउज़र अभी भी डिफ्लेक्ट एल्गोरिदम के गलत कार्यान्वयन के मुद्दे से पीड़ित हैं या अब इसका उपयोग करना सुरक्षित है? क्या यह जवाब का हिस्सा अभी तक है?
इहिबे जुब

172

GZip बस एक चेकसम और हेडर / पाद लेख के साथ अपस्फीति है। हालांकि, जैसा कि मैंने कठिन तरीका सीखा है , डिफ्लेट तेज है

gzip बनाम डिफ्लेट ग्राफ


13
यह उल्लेख करने के लिए कि ज़ालिब के पास विस्तार के लिए समर्थन नहीं है, और यहां तक ​​कि अगर ऐसा किया है, तो SSE 4.2 में CRC32 निर्देश बहुपद 1EDC6F41 का उपयोग करता है, और gzip प्रारूप बहुपद EDB3320 का उपयोग करता है - पूरी तरह से अलग एल्गोरिदम, प्रभावी ढंग से।
जैक लॉयड

7
और चूंकि डिफ्लेट तेज है, इसलिए एसओ गज़िप का उपयोग क्यों कर रहा है?
डेविड मर्डोक

40
ठीक है, यह उत्तर गलत निकला ... देखें: zoompf.com/blog/2012/02/lose-the-wait-http-compression ... विशेष रूप से क्लाइंट में 2 तरीके हैं जो वे "व्याख्या", शीर्षकहीन कर सकते हैं / चेकलेस और zlib हेडर के साथ। एक सही अपस्फीति के ब्राउज़रों में कार्यान्वयन खराब है। अपस्फीति से बचा जाना चाहिए।
सैम केसरॉन

4
@sam इसके अतिरिक्त मैंने बेंचमार्क को फिर से चलाया और एक आधुनिक इंटेल चिप पर, मुझे gzip 1441/692 मिलता है और 1286/531 को अपवित्र करता है। दूसरा नंबर डिकम्प्रेस है, पहले सेक है। तो Deflate है अभी भी तेजी से, आपके मानदंड अन्यथा दिखाते हैं? (मैं मानता हूं कि यह अन्य कारणों से उपयोगी नहीं हो सकता है, लेकिन उत्तर सही है , अपस्फीति तेज है ..)
जेफ एटवुड

6
@ जेफ़एटवुड लेकिन सवाल तेज नहीं था?
केन

16

आप संभवतः विकल्प के रूप में वास्तव में अपस्फीति लेने में सक्षम नहीं हैं। इसके विपरीत जो आप उम्मीद कर सकते हैं कि mod_deflate ग्लीट का उपयोग नहीं कर रहा है, लेकिन gzip। इसलिए जबकि बनाए गए अधिकांश बिंदु वैध हैं, यह संभावना अधिकांश के लिए प्रासंगिक नहीं है।


4

मुझे लगता है कि डिफ्लेट और गज़िप के बीच कोई बड़ा अंतर नहीं है, क्योंकि गज़िप मूल रूप से डिफलेट के चारों ओर लिपटा हुआ है (आरएफसी 1951 और 1952 देखें)।


3

मुख्य कारण यह है कि डिफ्लेट गज़िप की तुलना में तेजी से एनकोड करने के लिए और एक व्यस्त सर्वर पर जो अंतर कर सकता है। स्थैतिक पृष्ठों के साथ यह एक अलग सवाल है, क्योंकि वे आसानी से एक बार पूर्व-संकुचित हो सकते हैं।


संभवत: गज़िप के साथ आप हेडर को तब तक प्रसारित करना शुरू नहीं कर सकते जब तक कि आप सभी डेटा प्राप्त, संग्रहीत और संपीड़ित न करें? (क्योंकि हेडर बनाने के लिए आपको चेकसम की जरूरत है)
OJW

8
गज़िप प्रारूप में, चेकसम फ़ाइल के अंत में आता है, विशेष रूप से इसलिए डिफ्लेट ब्लॉक लिखना शुरू कर सकता है क्योंकि उन्हें सब कुछ होल्ड किए बिना संसाधित किया जाता है।
जैक लॉयड

2

mod_deflate को आपके सर्वर पर कम संसाधनों की आवश्यकता होती है, हालांकि आप संपीड़न की मात्रा के मामले में एक छोटा जुर्माना दे सकते हैं।

यदि आप कई छोटी फ़ाइलों की सेवा कर रहे हैं, तो मैं आपके संपीड़ित और असम्पीडित समाधानों का परीक्षण करने और उन्हें लोड करने की सलाह दूंगा - आपको कुछ ऐसे मामले मिल सकते हैं, जहां संपीड़न को सक्षम करने से बचत नहीं होगी।


जो कोई भी सोच रहा है, उसके लिए मेरी पाठ फ़ाइलें 30KB से 10KB तक जाती हैं - इसलिए फ़ाइलों को इससे भी छोटा होना चाहिए ताकि कोई बचत न हो सके। मैं 1KB से कम या कुछ इसी तरह का अनुमान लगा रहा हूं।
हेक्सटेक

0

अपघटन के लिए gzip और अपस्फीति में कोई अंतर नहीं होना चाहिए। Gzip सिर्फ एक दर्जन बाइट हैडर के साथ डिक्लेट होता है, जिसमें एक चेकसम भी होता है। चेकसम धीमी गति से संपीड़न का कारण है। हालाँकि, जब आप उन फ़ाइलों के zillions को precompressing कर रहे हैं जो आप चाहते हैं कि आपके फ़ाइल सिस्टम में एक पवित्रता की जाँच के रूप में उन चेकसमों को रखा जाए। इसके अलावा आप फ़ाइल पर आँकड़े प्राप्त करने के लिए कमांडलाइन टूल का उपयोग कर सकते हैं। हमारी साइट के लिए हम एक टन स्टैटिक डेटा (संपूर्ण खुली निर्देशिका, 13,000 गेम, लाखों कीवर्ड के लिए स्वत: पूर्ण आदि) को शामिल कर रहे हैं और हम एलेक्सा द्वारा सभी वेबसाइटों की तुलना में 95% तेजी से रैंक कर रहे हैं। फैक्सो खोज। हालाँकि, हम एक घर के स्वामित्व वाले वेब सर्वर का उपयोग करते हैं। Apache / mod_deflate ने इसे नहीं काटा। जब उन फ़ाइलों को फ़ाइल सिस्टम में संपीड़ित किया जाता है, तो आप न केवल न्यूनतम फ़ाइल सिस्टम ब्लॉक आकार के साथ अपनी फ़ाइल के लिए एक हिट लेते हैं, बल्कि फ़ाइल सिस्टम में फ़ाइल को प्रबंधित करने में सभी अनावश्यक ओवरहेड जिसे वेबसर्वर कम देखभाल कर सकता है। आपकी चिंताओं को कुल डिस्क पदचिह्न और पहुंच / अपघटन समय होना चाहिए और दूसरा इस डेटा को प्राप्त करने में सक्षम होने में गति। पदचिह्न महत्वपूर्ण है क्योंकि डिस्क स्थान सस्ता होने के बावजूद आप कैश में फिट होना चाहते हैं।


GZip शायद विघटन पर चेकसम की जांच करता है, इसलिए विघटन के लिए गति अंतर।
सीन ओसेवा

-1

अपाचे 2 के साथ उबंटू पर और पहले से स्थापित डिफ्लेट मॉड्यूल (जो कि यह डिफ़ॉल्ट रूप से है), आप दो आसान चरणों में डिफ्लेट गज़िप संपीड़न को सक्षम कर सकते हैं :

a2enmod deflate
/etc/init.d/apache2 force-reload

और तुम दूर हो! मुझे वे पृष्ठ मिले जो मैंने अपने adsl कनेक्शन पर परोसे थे जो बहुत तेज़ी से लोड हुए थे।

संपादित करें: @ GertvandenBerg की टिप्पणी के अनुसार, यह गज़िप संपीड़न को सक्षम करता है, अपस्फीति को नहीं।


6
सिवाय इसके कि gzip को सक्षम करता है, क्योंकि mod_deflate उलझन में केवल gzip संपीड़न लागू करता है ...
Gert van den Berg

@GertvandenBerg मैं अपने जवाब को नवीनीकृत किया है, लेकिन रिकार्ड के लिए, gzip है Deflate, बस अतिरिक्त हेडर और चेकसम साथ
एडन

@ यिन हां, लेकिन चेकसम का प्रदर्शन प्रभाव पड़ता है ... (और कच्चा अपस्फीति मानक अनुरूप नहीं है)
गर्ट वैन डेन बर्ग

-4

अगर मुझे ठीक से याद है

  • gzip अपस्फीति की तुलना में थोड़ा अधिक संपीड़ित करेगा
  • अपस्फीति अधिक कुशल है

2
gzip एक हेडर के साथ अपस्फीति है। और HTTP 1.1 डिफलेट वास्तव में zlib है (जो कि डिफ्लेट के आसपास एक आवरण भी है)
डेविड मर्डोक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.