سؤال

كان إلى حد ما مناقشة حية حول تصغير جافا سكريبت و CSS مقابل شخص يفضل باستخدام Gzip.

سأتصل هذا الشخص X.

س: قال Gzip allready قد minifies رمز لأنه الكود البريدية الملفات الخاصة بك.

انا اختلف.الرمز البريدي هو ضياع طريقة تقلص حجم الملف.ضياع يعني الأصلي يجب أن يتم استعادة تماما, يعني معلومات يجب أن تكون مخزنة أن تكون قادرة على استعادة مساحات الأمم المتحدة-مطلوب الشخصيات ، وعلق رمز و كل شيء آخر.التي تأخذ مساحة أكبر ، منذ أكثر يجب أن تكون مضغوطة.

ليس لدي أي طريقة الاختبار, ولكن أعتقد أن Gzip من هذا القانون:

.a1 {
    background-color:#FFFFFF;
    padding: 40px 40px 40px 40px;
}

سوف يكون لا يزال أكبر من Gzip من هذا القانون:

.a1{body:background-color:#FFF;padding:40px}

هل هناك أي شخص يمكن أن يثبت هذا الحق أو الخطأ.
و من فضلك لا تأتي قائلا "هذا صحيح لأن هذا هو ما كنت تستخدم دائما".

أنا أسأل عن دليل علمي هنا.

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

المحلول

بسيطة جدا لاختبار.أخذت js بك ، ووضعها في ملفات مختلفة و ركض gzip -9 عليها.وهنا النتيجة.وقد تم ذلك على ويندوز إكس بي تشغيل الجهاز Cygwin و gzip 1.3.12.

-rwx------  1 xxxxxxxx mkgroup-l-d     88 Apr 30 09:17 expanded.js.gz

-rwx------  1 xxxxxxxx mkgroup-l-d     81 Apr 30 09:18 minified.js.gz

وهنا مزيد من الاختبارات في استخدام العالم الحقيقي شبيبة سبيل المثال.الملف المصدر هو "common.js" حجم الملف الأصلي هو 73134 بايت.مصغر, جاء إلى 26232 بايت.

الملف الأصلي:

-rwxrwxrwx 1 xxxxxxxx mkgroup-l-d 73134 Apr 13 11:41 common.js

مصغر الملف:

-rwxr-xr-x 1 xxxxxxxx mkgroup-l-d 26232 Apr 30 10:39 common-min.js

الملف الأصلي المضغوطة مع -9 الخيار (نفس النسخة على النحو الوارد أعلاه):

-rwxrwxrwx 1 xxxxxxxx mkgroup-l-d 12402 Apr 13 11:41 common.js.gz

مصغر الملفات المضغوطة مع -9 الخيار (نفس النسخة على النحو الوارد أعلاه):

-rwxr-xr-x 1 xxxxxxxx mkgroup-l-d  5608 Apr 30 10:39 common-min.js.gz

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

نصائح أخرى

وهنا نتائج اختبار لدي ، وذلك باستخدام "الحياة الحقيقية" CSS الملف من موقع الويب الخاص بي. CSS محسن يستخدم تصغير الحجم.معيار لينكس الأرشيف التطبيق الذي يأتي مع أوبونتو كان يستخدم gzipping والمساعد.

الأصل: 28,781 بايت
مصغر: 22,242 بايت
المضغوطة: 6,969 بايت
مين+Gzip: 5,990 بايت

رأيي الشخصي هو أن تذهب gzipping والمساعد أول, منذ أن يجعل من الواضح أكبر الفرق.أما بالنسبة تصغير الحجم ، فإنه يعتمد على كيفية العمل.عليك أن تبقي الأصلي ملف CSS من أجل إجراء تعديلات مزيد من أسفل الخط.إذا كان لا يزعجك إلى صغر بعد كل تغيير ثم يذهب لذلك.

(ملاحظة:هناك حلول أخرى ، مثل تشغيله من خلال minifier "على الطلب" عندما تخدم ملف التخزين المؤقت في نظام الملفات.)

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

صغر+gzip كمادات أكثر من مجرد gzip

الإجابة على السؤال الأصلي هو, نعم, صغر + gzip سوف تكتسب كمية كبيرة من ضغط من gzip.وهذا ينطبق على أي غير تافهة سبيل المثال (أي أي فائدة JS أو كود CSS أكثر من بضع مئات من وحدات البايت).

للحصول على أمثلة من هذا في الواقع ، الاستيلاء على مسج البرمجية المصدر والذي يتوفر مصغر غير مضغوط, ضغط لهم على حد سواء مع gzip و نظرة.

ومن الجدير بالذكر أن جافا سكريبت الفوائد الكثير من تصغير الحجم من حسن محسن CSS, ولكن لا يزال هناك فائدة.

المنطق:

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

  • تصغير الحجم يتجاهل داع بيضاء ، وترك المساحات فقط حيث من الضروري النحوية الأسباب.
  • تصغير الحجم يزيل التعليقات.
  • كود تصغير الحجم قد يحل محل معرف الأسماء مع أسماء أقصر حيث لن يكون هناك أي آثار جانبية.
  • كود تصغير الحجم قد جعل تافهة 'مترجم التحسينات إلى التعليمات البرمجية التي هي ممكنة فقط من خلال تحليل التعليمات البرمجية
  • CSS تصغير الحجم قد يلغي زائدة القواعد أو الجمع بين القواعد التي لها نفس محدد.

أنت على حق.

انها ليست نفس الشيء قلل من gzipping والمساعد (أنها يمكن أن يسمى نفسه إذا كان هذا هو الحال).على سبيل المثال, ليس نفس gzip هذا:

var myIncrediblyLongNameForThisVariableThatDoesNothingButTakeUpSpace = null;

من صغر إلى نهاية المطاف مع شيء من هذا القبيل:

var a = null;

طبعا أنا أقول أفضل نهج في معظم الحالات إلى صغر أولا ثم Gzip, من مجرد تصغير أو gzipping والمساعد على الرغم اعتمادا على الرمز في بعض الأحيان مجرد تصغير أو gzipping والمساعد سوف تعطيك نتائج أفضل من القيام على حد سواء.

هناك العتبة التي gzip-الترميز هو مفيد.القاعدة العامة هي:أكبر ملف أفضل ضغط gzip سوف يفوز اليدين باستمرار.بالطبع يمكنك صغر أولا ثم gzip بعد.

ولكن إذا كنا نتحدث عن gzip مقابلصغر على قطعة صغيرة من النص لا يزيد 100bytes طويلة "موضوعية" المقارنة لا يمكن الاعتماد عليها ، حتى عديمة الجدوى ما لم يخرج مع النص الأساس لإنشاء القياسية ووسائل القياس ، مثل أبجد هوز-نوع ولكن مكتوب في جافا سكريبت أو CSS.

لذلك اسمحوا لي أن أقترح أن المعيار أحدث الإصدارات مسج MooTools (غير مضغوط الإصدارات) باستخدام بلدي خالية من الدهون صغر (PHP) رمز (مجرد تجريد قبالة whitespaces والتعليقات ، أي تقصير من المتغيرات لا baseX-ترميز)

وهنا النتائج من صغر مقابلgzip (على مستوى المحافظة-5 ضغط) مقابلصغر+gzip:

MooTools-Core
-------------
Baseline 102,991 bytes
Minified 79,414 (77.1% of original)
Gzipped 27,406 (26.6%)
Minified+Gzipped 22,446 (21.8%)

jQuery
------
Baseline 170,095
Minified 99,735 (58.6% of original)
Gzipped 46,501 (27.3%)
Minified+Gzipped 27,938 (16.4%)

قبل أي شخص يقفز السلاح, هذه ليست معركة من شبيبة المكتبات.

كما يمكنك أن ترى, تصغير+gzipping والمساعد يعطيك ضغط أفضل على الملفات الكبيرة.تصغير رمز مزاياه ، ولكن العامل الرئيسي هو كم بيضاء و تعليقات موجودة في التعليمات البرمجية الأصلية.في هذه الحالة, مسج لديه أكثر من ذلك أنه يعطي أفضل تصغير الحجم (أكثر whitespaces في وثائق مضمنة).ضغط Gzip قوة في كم التكرار في المحتوى.حتى انها ليست حول صغر مقابلgzip.يفعلون الأشياء بطريقة مختلفة.و يمكنك الحصول على الأفضل من كلا العالمين باستخدام كليهما.

لماذا لا تستخدم على حد سواء ؟

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

أنا فقط فعلت هذا ، ويحدث هذا لأول css, حجم 184 بايت وعلى الثاني واحدة 162 بايت.

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

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

أنا لم أرى أحد يذكر من الضغط حتى وأنا على نشر النتائج على ذلك.

وهنا بعض الأرقام جئت حتى مع استخدام UflifyJS على تصغير الحجم و Gzip.كان حوالي 20 الملفات التي كنت متصلا معا في حوالي 2.5 MB مع تعليقات و كل شيء.

Concat الملفات 2.5 MB

uglify({
    mangle: false
})

مصغر دون تغيير اسم:929kb

uglify({
    mangle: true
})

مصغر المهترئ:617 كيلوبايت

الآن إذا كنت تأخذ هذه الملفات gzip لهم أنا سوف تحصل على 239kb و 190kb على التوالي.

هناك طريقة بسيطة جدا من اختبار هذا:إنشاء ملف تتألف فقط من بيضاء و ملف آخر هذا حقا فارغة.ثم Gzip كل ومقارنة الأحجام.الملف مع فاصل في ذلك بالطبع سوف يكون أكبر.

بالطبع "الإنسان" الضياع أن يحافظ على تخطيط أو بعض الأشياء الهامة الأخرى و يزيل أي لا حاجة غير المرغوب فيه (whitespaces تعليقات زائدة الأشياء.... الخ) سوف يكون أفضل من ضياع ضغط gZip.

على سبيل المثال, أشياء مثل علامات أو أسماء الوظائف من المرجح أن تكون مدة معينة لوصف معنى.استبدال هذه أسماء حرف واحد طويل سيوفر الكثير من الفضاء و ليس من الممكن مع الضياع.

بالمناسبة, CSS هناك أدوات مثل الضاغط المغلق هذا الضياع العمل بالنسبة لك.

ومع ذلك, سوف تحصل على أفضل النتائج عند الجمع بين "الضياع الأمثل" و الضياع.

بالطبع يمكنك اختبار الكتابة الخاصة بك إلى ملف gzip مع zlib.يمكنك أيضا تجربة مع "gzip" فائدة البرنامج.

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

لذلك هذا يعتمد على كيفية المصدر.على سبيل المثال ، الكثير من المستمر المساحات (السابق > 1000) قد تكون مضغوطة كما بنفس حجم قليل (السابقين ، < 10) ممنوع.

هذه هي النتائج عندما gziping الملفين

bytes  File
45     min.txt
73     min.gz

72     normal.txt
81     normal.gz

كنت على صواب, صغر+gzip النتائج في أقل بايت.لا دليل علمي على الرغم من.

كيف لا يوجد لديك طريقة الاختبار ؟

صغر التعليمات البرمجية في ملف واحد ، وترك الأمر "unminified" على آخر.تحميلها إلى خادم الويب قادرة على gziping الإخراج (mod_deflate Apache ، على سبيل المثال), تثبيت الحرائق التمديد فايرفوكس, مسح ذاكرة التخزين المؤقت الخاصة بك و الوصول إلى كل الملفات.الحرائق "صافي" علامة التبويب سوف تحتوي على نفس كمية نقل البيانات ومقارنة تلك وعليك "التجريبية" دليل على ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top