ضغط الملف نفسه في كل مرة
يضغط Apache الاستجابات لحظيًا. وبالنسبة إلى صفحة تختلف في كل مرة، هذا هو الخيار الوحيد. أما بالنسبة إلى ورقة أنماط تتغير مرة في الشهر، فهذا يعني أن الخادم يكرر العمل نفسه لكل زائر، لأسابيع، ويرمي النتيجة في كل مرة. ولا توجد ذاكرة تخزين مؤقت لذلك.
جرى القياس في 19 أغسطس 2026 عبر اتصال قائم، على ملفَّي هذا الموقع نفسه style.css (124 kB) وكذلك world.js (102 kB):
| الزمن | البايتات | |
| دون ضغط | 2.9 ms | 124,755 |
| gzip، لحظيًا | 18.1 ms | 34,995 |
| brotli، لحظيًا | 14.5 ms | 32,685 |
| world.js مع gzip | 47.9 ms | 38,283 |
| world.js مع brotli | 15.9 ms | 38,086 |
48 ملّي ثانية من وقت المعالج، لكل طلب، لإنتاج نتيجة متطابقة بايتًا ببايت. وعلى خادم صغير، هذا ليس فرقًا يُهمل.
اضغط مرة واحدة، على القرص
تكتب خطوة البناء الملف المضغوط بجانب الأصلي، وتقدّمه قاعدة إعادة كتابة عندما يُعلن المتصفح أنه يقبل gzip. وتقديم ملف جاهز يكلّف ما يكلّفه تقديم أي ملف.
gzip وليس brotli، لسبب ممل: لا يوجد برنامج brotli مثبت على هذا الجهاز. تخرج الملفات أكبر بنحو 7 % مما كان سيُنتجه brotli، وزمن الخادم خُمس ما يكلّفه brotli اللحظي. وكانت هذه المقايضة تستحق القبول الآن بدلًا من انتظار حل أجمل.
رقم الإصدار يدخل في اسم الملف
تكتب عملية البناء style.css.<mtime>.gz، وقيمة ?v= في الترميز هي وقت التعديل نفسه. ولا تعمل إعادة الكتابة إلا عند وجود ملف يحمل الرقم المطابق.
لهذا الترتيب خاصية تستحق أن يُصمَّم من أجلها عن قصد: إذا تغيرت ورقة الأنماط ونُسيت إعادة البناء، يشير الرقم في الترميز إلى ملف غير موجود، فلا تعمل إعادة الكتابة، ويقدّم Apache الملف الأصلي كالمعتاد. وأسوأ الاحتمالات أن يغيب التسريع. أما ورقة أنماط قديمة فلا يمكن أن تُقدَّم. وينبغي فحص كل نظام للتخزين المؤقت في ضوء هذا السؤال — عندما يحدث خطأ، هل يصبح بطيئًا أم يصبح خاطئًا؟
الخلل في وسط ذلك كله
الملف المُقدَّم مضغوط بـ gzip أصلًا، لذا يجب ألا يُضغط مرة أخرى عند إرساله. وقد ضبط الإعداد في الأصل no-gzip، وهذا يوقف أحد ضاغطَي Apache. أما الآخر، mod_brotli، فقد ضغط بمرح ملف gzip الجاهز بـ brotli، بينما ظلت ترويسة الاستجابة تقول gzip.
فتلقّت المتصفحات محتوى غير قابل للقراءة. ولم يُكتشف ذلك بالنظر إلى الصفحة — بل بجمع البايتات والعثور على رقم لا معنى له. لا بد من no-gzip وكذلك no-brotli كليهما، وواحد فقط منهما هو الواضح.