مستوى المقال: محترف
لو فاتورة الـ CDN Egress بتاعتك زادت بدون ما المحتوى يتغير، انت غالبًا بتدفع لـ Gzip تقريبًا 22% أكتر من اللازم. Brotli بـ 4 سطور في NGINX بيقلل حجم JS و CSS و HTML بنسبة 17 لـ 26% مقارنة بـ Gzip level 6، بدون لمس سطر كود في التطبيق.
المشكلة باختصار: ليه Gzip لوحده مش كفاية في 2026
Gzip اتعمل سنة 1992. الـ algorithm شغّال على LZ77 + Huffman coding، وهو ممتاز للنصوص المتكررة، لكن ماعندوش static dictionary مبني للويب. ده معناه إنه لازم يتعلّم الـ patterns كل مرة من الصفر لكل ملف.
تخيّل معاك مترجم بيترجم نفس كتالوج المنتج كل يوم. لو ماحفظش الكلمات الشائعة (شحن، توصيل، السعر)، هيرجع يبحث عنها في القاموس مرة بعد مرة. ده تقريبًا اللي بيحصل في Gzip مع كل response جديد.
الآن نرجع للمفهوم بشكل دقيق: Brotli — اللي طلعته Google سنة 2015 وانعتمد كـ RFC 7932 — جاي معاه static dictionary فيه 13,504 كلمة وعبارة شائعة في الويب (HTML tags، CSS properties، JavaScript keywords، حتى عبارات إنجليزية شائعة). فبيعرف يضغط من أول طلب أحسن من Gzip اللي بيحتاج payload أكبر علشان "يتعلم" الـ patterns.
الأرقام من إنتاج فعلي
قست النتائج على bundle.js حجمه 412KB (React 18 + Tailwind CSS + محتوى 14 صفحة منتج):
- الملف الأصلي: 412 KB
- Gzip level 6 (الافتراضي): 142 KB — نسبة ضغط 65.5%
- Brotli level 6: 118 KB — نسبة ضغط 71.4%
- Brotli level 11 (أقصى ضغط، static فقط): 104 KB — نسبة ضغط 74.8%
الفارق بين Brotli level 6 و Gzip level 6: 16.9% توفير في الحجم. ده ترجم في موقع e-commerce بـ 2.4 مليون زائر شهريًا لـ:
- توفير 2.8 TB من Egress الشهر الواحد
- تقليل P75 LCP من 2.6s لـ 2.1s (الـ critical CSS بيوصل أسرع)
- توفير حوالي 240$ شهريًا على فاتورة CloudFront
إعداد Brotli في NGINX 1.25 — الأربع سطور
أول حاجة: لازم تتأكد إن مديول ngx_brotli متثبّت. على Ubuntu 24.04:
apt install libnginx-mod-http-brotli-filter libnginx-mod-http-brotli-staticتاني حاجة: ضيف الـ load_module في nginx.conf فوق الـ http block (لو الباكدج بيحط الـ symlinks تلقائيًا في /etc/nginx/modules-enabled تخطّى الخطوة دي):