لماذا استخدام التحرك بدلا من gzip لملفات نصية يقدمها Apache؟

StackOverflow https://stackoverflow.com/questions/388595

سؤال

ما هي المزايا التي تقوم بها أي طريقة لملفات HTML و CSS و JavaScript المقدمة بواسطة خادم مصباح. هل هناك بدائل أفضل؟

يوفر الخادم معلومات إلى تطبيق خريطة باستخدام JSON، لذلك حجم كبير من الملفات الصغيرة.

أنظر أيضا هل هناك أي أداء يضرب يشارك في اختيار gzip أكثر من تحريف ضغط HTTP؟

هل كانت مفيدة؟

المحلول

لماذا استخدام التحرك بدلا من gzip لملفات نصية يقدمها Apache؟

الجواب البسيط هو لا.


RFC 2616. يحدد الانفديل على النحو التالي:

صرف تنسيق "ZLIB" المحدد في RFC 1950 في تركيبة مع آلية ضغط "الانفصال" الموضحة في RFC 1951

يتم تعريف تنسيق ZLIB في RFC 1950. كما :

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

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

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

لذلك، عدد قليل من الرؤوس و adler32 المجموع الاختباري

RFC 2616 يحدد GZIP على النحو التالي:

Gzip تنسيق الترميز الذي ينتج عنه برنامج ضغط الملفات "Gzip" (GNU ZIP) كما هو موضح في RFC 1952 [25]. هذا التنسيق هو ترميز lempel-ZIV (LZ77) مع CRC 32 بت.

RFC 1952. يحدد البيانات المضغوطة على النحو التالي:

يستخدم التنسيق حاليا طريقة الانفصال للضغط ولكن يمكن توسيعها بسهولة لاستخدام طرق ضغط أخرى.

CRC-32 أبطأ من adler32.

مقارنة بفحص التكرار الدوري لنفس الطول، فإنه يتداول موثوقية للسرعة (مفضل الأخير).

لذلك ... لدينا 2 آليات ضغط تستخدم نفس خوارزمية للضغط، ولكن مختلف خوارزمية للرؤوس والخنق.

الآن، حزم TCP الأساسية هي بالفعل موثوقة جدا, ، وبالتالي فإن القضية هنا ليست أدلر 32 مقابل CRC-32. أن gzip يستخدم.


اتضح العديد من المتصفحات على مر السنين نفذت خوارزمية تحريف غير صحيحة. بدلا من توقع رأس ZLIB في RFC 1950، يوقعون ببساطة الحمولة المضغوطة. وبالمثل، ارتكبت خوادم الويب المختلفة نفس الخطأ.

لذلك، على مر السنين بدأت المتصفحات تنفيذ المنطق الضبابي انفتاح التنفيذ، يحاولون أن يقوم رأس ZLIB و Adler Checksum، إذا فشل ذلك في محاولة للحصول على الحمولة.

نتيجة وجود منطقي معقد مثل هذا هو أنه غالبا ما يتم كسره. Verve Studio لديك مساهم المستخدم اختبار القسم الذي يظهر مدى سوء الوضع.

على سبيل المثال: Deflate Works في Safari 4.0 ولكن يتم كسره في Safari 5.1، كما أنه يحتوي دائما على مشكلات على IE.


لذلك، أفضل شيء يجب القيام به هو تجنب الانهيار تماما، فإن دفعة السرعة الطفيفة (بسبب Adler 32) لا يستحق مخاطر الحمولة المكسورة.

نصائح أخرى

Gzip ببساطة ينفصل بالإضافة إلى المجموع الاختباري والرأس / التذييل. فرط أسرع, ، كما لو تعلمت بالطريقة الصعبة.

gzip vs deflate graph

من المحتمل أن تكون غير قادر على اختيار الانفصال فعليا كخيار. على عكس ما قد تتوقعه mod_deflate. لا يستخدم الانفصال ولكن gzip. لذلك في حين أن معظم النقاط التي تم إجراؤها صالحة من المحتمل أنها غير ذات صلة بالنسبة لمعظم.

أعتقد أنه لا يوجد فرق كبير بين تحريف و GZIP، لأن Gzip أساسا هو مجرد رأس ملفوف حول الانفج (انظر RFCS 1951 و 1952).

السبب الرئيسي هو أن الانتحار أسرع في الترميز من GZIP وعلى خادم مزدحم قد يحدث فرقا. مع الصفحات الثابتة، إنه سؤال مختلف، حيث يمكن بسهولة ضغطه مسبقا مرة واحدة.

يتطلب mod_deflate موارد أقل على الخادم الخاص بك، على الرغم من أنك قد تدفع عقوبة صغيرة من حيث مقدار الضغط.

إذا كنت تخدم العديد من الملفات الصغيرة، فسوف أوصي بمعايير وتحميل الحلول المضغوطة وغير المضغوطة - قد تجد بعض الحالات التي لا يؤدي فيها ضغط التمكين إلى توفير مدخرات.

لا ينبغي أن يكون هناك أي فرق في Gzip & Dyplate بسبب الضغط. Gzip ينفث فقط مع عدد قليل من رأس البايت ملفوفة حولها بما في ذلك المجموع الاختباري. المجموع الاختباري هو السبب في الضغط أبطأ. ومع ذلك، عندما تكون عضوا مسبقا Zillions من الملفات، فأنت تريد أن تقوم المجموع الاختباري بمثابة فحص تعاني من نظام الملفات الخاص بك. بالإضافة إلى ذلك، يمكنك استخدام أدوات Commandline للحصول على إحصائيات في الملف. بالنسبة لموقعنا، نحن نعتمد طن من البيانات الثابتة (الدليل المفتوح بأكمله، 13000 دورة، الإكمال التلقائي للملايين من الكلمات الرئيسية، وما إلى ذلك) ونحن في المرتبة 95٪ أسرع من جميع مواقع الويب من Alexa. البحث عن الفاكس. وبعد ومع ذلك، نحن نستخدم خادم الويب النمو المنزلية. Apache / mod_deflate لم يقطعها. عندما يتم ضغط هذه الملفات في نظام الملفات، لا تتأخر فقط للملف الخاص بك بحجم كحد أدنى لحجب نظام الملفات ولكن جميع النفقات العامة غير الضرورية في إدارة الملف في نظام الملفات التي يمكن أن يهتم بها خادم الويب أقل. يجب أن تكون مخاوفك بالكامل بصمة القرص والوصول / إلغاء الضغط وسرعة ثانيا في القدرة على الحصول على هذه البيانات مسبقا. البصمة مهمة لأنه على الرغم من أن مساحة القرص رخيصة تريد قدر الإمكان لتناسب ذاكرة التخزين المؤقت.

على أوبونتو مع Apache2 ووحدة الانفصال المثبتة بالفعل (التي هي افتراضيا)، يمكنك تمكين فرط ضغط Gzip في خطوتين سهل:

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

وأنت بعيد! لقد وجدت صفحات خدمتها عبر اتصال ADSL الخاص بي بشكل أسرع بكثير.

يحرر: وفقا لتعليق @ gertvandenberg's، فإن هذا يتيح ضغط Gzip، وليس ينفث.

إذا كنت أتذكر بشكل صحيح

  • سوف gzip ضغط أكثر قليلا من الانتحار
  • الانفديل هو أكثر كفاءة
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top