Gzip وBrotli خوارزميتا ضغط يطبّقهما الخادم على ملفّات النصّ (HTML وCSS وJS) قبل إرسالها، فيصل حجم أصغر بكثير إلى المتصفّح الذي يفكّه — تحميل أسرع ونطاق أقلّ.

نقاط أساسية

  • يضغطان الموارد النصّية بفعالية (توفير 60–80% شائع)؛ ولا فائدة تُذكر على الصور المضغوطة أصلًا (JPEG/WebP).
  • Brotli أحدث وأعلى نسبة ضغط من Gzip خاصّةً للنصوص، ومدعوم في المتصفّحات الحديثة عبر HTTPS.
  • يُفعَّل من إعداد الخادم (Nginx/Apache/LiteSpeed) أو عبر CDN.
  • التفاوض تلقائي عبر ترويسة Accept-Encoding من المتصفّح.
الخوارزميةنسبة الضغطالأنسب لـ
Gzipجيدةتوافق واسع جدًّا
Brotliأعلىالنصوص عبر HTTPS

كيف يعمل التفاوض على الترميز

عندما يطلب المتصفّح صفحةً، يرسل ترويسة تخبر الخادم بأنواع الضغط التي يفهمها، مثل Accept-Encoding: gzip, br. يقرأ الخادم هذه القائمة ويختار أفضل خوارزمية يدعمها هو والمتصفّح معًا، ثم يضغط الردّ ويعلن عن طريقته في ترويسة Content-Encoding: br أو Content-Encoding: gzip. يفكّ المتصفّح الضغط شفّافيًّا قبل أن يعرض الصفحة، فالعملية كاملة لا يلاحظها الزائر إطلاقًا؛ كل ما يلمسه هو أن البيانات وصلت أسرع. هذا التفاوض تلقائي بالكامل ولا يتطلّب منك تعديل شيفرة الموقع، بل ضبط الخادم فقط حتى يبدأ بالضغط.

ماذا تضغط وماذا تترك

القاعدة بسيطة: اضغط الملفّات النصّية، واترك المضغوطة أصلًا. تستفيد ملفّات HTML وCSS وJavaScript وSVG وJSON وXML والخطوط من نوع woff (الخامة) استفادةً كبيرة لأنها مليئة بالأنماط المتكرّرة والمسافات التي تجد الخوارزميات فيها فرصةً هائلة للاختصار، فيصل التوفير غالبًا إلى ستين أو ثمانين بالمئة من الحجم. في المقابل، الصور بصيغ JPEG وPNG وWebP وAVIF ومقاطع الفيديو وملفّات الأرشيف مثل zip مضغوطة مسبقًا داخليًّا، فإعادة ضغطها لا تقلّص حجمها بل قد تزيده قليلًا وتهدر وقت المعالج بلا مقابل. لذلك تستثني إعدادات الخوادم الجيّدة هذه الأنواع من الضغط افتراضيًّا، وتقصر العمل على امتدادات النصّ.

Brotli مقابل Gzip ومستويات الضغط

يتفوّق Brotli على Gzip في نسبة الضغط، وأوضح فارق له يظهر في النصوص الثابتة لأنه يحمل قاموسًا داخليًّا مبنيًّا على أنماط الويب الشائعة. لكن لكلّ خوارزمية مستويات ضغط متدرّجة تمثّل مقايضةً بين استهلاك المعالج وحجم النتيجة: المستويات العالية تنتج ملفّات أصغر لكنها تستهلك وقتًا ومعالجة أكثر عند كل طلب. الحلّ الأمثل أن تستعمل مستوًى عاليًا جدًّا للأصول الثابتة التي تُضغط مرّةً وتُحفظ، ومستوًى متوسّطًا للمحتوى الديناميكي الذي يُولَّد عند كل زيارة كي لا يثقل الخادم. هكذا تنال أصغر حجم للملفّات الثابتة دون أن تدفع كلفة المعالج في كل طلب صفحة.

تفعيله والتحقّق منه

تُفعّل الخوارزميتين من إعداد الخادم مباشرةً على Nginx أو Apache أو LiteSpeed، أو تتركهما لطبقة الـCDN التي تتولّى الضغط نيابةً عنك عند الحافة الأقرب للزائر. للتحقّق أن الضغط يعمل فعلًا، افتح أدوات المطوّر في المتصفّح وراقب ترويسات الردّ بحثًا عن Content-Encoding، فإن وجدتها تحمل br أو gzip فالضغط نشط. وانتبه لمزلقين شائعين: لا تضغط الملفّ مرّتين عبر طبقتين متتاليتين (الخادم والـCDN معًا) لأن ذلك يهدر المعالجة دون فائدة، واحرص على أن يجري الضغط قبل التخزين في الكاش لا بعده حتى تُخزَّن النسخة المضغوطة وتُقدَّم جاهزة لكل زائر لاحق بدل إعادة ضغطها في كل مرّة.