تُصحّح نصًا في موقعك الإلكتروني، أو تغيّر صورة، أو تحدّث لونًا؛ لكن حين تفتح الصفحة في المتصفح تظهر أمامك النسخة القديمة. لقد أُجري التغيير فعلًا، والملف على الخادم جديد، ومع ذلك لا يظهر على الشاشة. والسبب في ذلك يكون دائمًا تقريبًا هو طبقات الـ cache (التخزين المؤقت). الـ cache هو الاحتفاظ بنسخة من المحتوى كي تُفتح الصفحة بسرعة أكبر؛ والمشكلة أن هذه النسخة تتقادم عند التحديث. نتناول فيما يلي مشكلة «غيّرتُ لكن القديم يظهر» طبقةً طبقة.
الـ cache ليس أمرًا سيئًا؛ بل هو على العكس أحد الطرق الأساسية لجعل الموقع يُفتح بسرعة. فلو أُنتجت جميع الملفات من الصفر وأُعيد تنزيلها كلما فتح كل زائر الصفحة، لازداد حمل الخادم وأصبحت الصفحة أبطأ. لذلك يُحتفظ بنسخ من المحتوى في نقاط متعددة. وتنشأ المشكلة من أن هذه النسخ لا تُحدَّث تلقائيًا حين تُجري تحديثًا. لذلك فإن جوهر الأمر ليس تعطيل الـ cache كليًا، بل ضمان تجديد النسخة المعنية عند إجراء التحديث.
طبقات الـ cache: أين تتراكم المشكلة؟
تمرّ صفحة الويب بعدة نقاط قبل أن تصل إلى الزائر، وكل نقطة قد تحتفظ بنسخة من المحتوى. فإذا استمر المحتوى القديم في الظهور رغم إجراء التغيير، فذلك يعني أن النسخة عالقة في إحدى هذه الطبقات.
- cache المتصفح (browser cache): يُحفظ في حاسوب الزائر. يحتفظ المتصفح على القرص بملفات الـ CSS وJavaScript والصور التي نزّلها سابقًا كي لا يُعيد تنزيلها.
- cache الخادم: تُحفظ في جانب الاستضافة نسخة جاهزة ومُنتَجة مسبقًا من الصفحة؛ فلا تُنشأ الصفحة من جديد مع كل طلب.
- cache الـ CDN: تنسخ شبكة توزيع المحتوى (CDN) الملفات على خوادم موزّعة حول العالم. تُقدَّم للزائر أقرب نسخة إليه؛ وحين لا تُحدَّث هذه النسخة يصل الملف القديم.
- إضافات cache في ووردبريس: في ووردبريس تُنتج إضافات الـ cache نسخة HTML ثابتة من الصفحات. وقد تستمر الإضافة في تقديم النسخة القديمة حتى لو تغيّر المحتوى.
الحالة الخاصة لملفات CSS وJavaScript
أكثر الطبقات تضليلًا هي cache ملفات CSS وJavaScript. فحين ينزّل المتصفح اسم هذه الملفات مرة واحدة، يعدّ الملف الذي يحمل الاسم نفسه غير متغيّر ولا يسأل الخادم عنه مرة أخرى. وحتى لو غيّرت محتوى الملف، يستخدم المتصفح النسخة القديمة على القرص لأن اسم الملف بقي كما هو. النتيجة: تغيير التصميم موجود في الشيفرة لكنه لا يظهر على الشاشة.
ينطبق الأمر نفسه على الصور المُستدعاة بـ url() داخل الـ CSS. فإذا رفعت صورة خلفية باسم الملف نفسه، يستمر المتصفح في عرض الصورة القديمة لأن العنوان لم يتغيّر. وهذا مضلِّل بوجه خاص في صور الخلفية الكبيرة مثل قسم الـ hero: تجدّد الصورة، وتستقر النسخة الجديدة على الخادم، لكن الزائر يظل يرى الصورة المقصوصة أو القديمة.
هذا السلوك في الحقيقة تحسين متعمَّد للسرعة. فالمتصفح لا يُعيد تنزيل ملف يحمل العنوان نفسه بافتراض أنه لم يتغيّر؛ وبذلك يُفتح الموقع أسرع. والمشكلة تنشأ فقط من بقاء العنوان ثابتًا رغم تغيّر المحتوى. لذلك فإن الحل ليس تعطيل الـ cache، بل القدرة على إبلاغ المتصفح رسالة «هذا الآن ملف مختلف» كلما تغيّر الملف.
الحل الدائم: معامل الإصدار (versioning)
تنظيف الـ cache يدويًا مع كل تغيير ليس أمرًا مستدامًا؛ الحل الحقيقي هو إضافة معامل إصدار إلى عنوان الملف. فكلما تغيّر الملف يتغيّر هذا المعامل تلقائيًا، فيعدّه المتصفح ملفًا جديدًا ويُعيد تنزيله.
- الإصدار الثابت لا يكفي: في إصدار ثابت مثل style.css?ver=1.0، حتى لو تغيّر الملف مرارًا فإن الرقم يبقى كما هو، فيستمر المتصفح في تقديم الملف القديم.
- طريقة filemtime: يُضاف إلى الإصدار وقت آخر تعديل للملف (style.css?ver=1.0.1787157120). فكلما تغيّر الملف تتغيّر هذه القيمة تلقائيًا؛ فينزّل المتصفح النسخة الجديدة دون حاجة إلى تدخّل يدوي.
- الصور داخل الـ CSS: بالنسبة إلى صور url() التي لا يمكن إصدارها مباشرة، يُنقل عنوان الصورة إلى متغيّر، ويُضاف إلى ذلك المتغيّر ختم الوقت نفسه؛ فتتجدّد الصورة أيضًا مع كل تحديث.
كيف تنظّف كل طبقة؟
إذا كان التغيير لا يظهر، فإن تطبيق الحل بترتيب الطبقات يعطي أسرع نتيجة:
- المتصفح: أجرِ تحديثًا قسريًا (على ويندوز Ctrl+F5، وعلى ماك Cmd+Shift+R). يجعل هذا المتصفح يتجاوز الـ cache ويسحب الملفات من الخادم من جديد. كما أن استخدام جهاز مختلف أو نافذة خفية يفيد في التحقق.
- الإضافة/الخادم: شغّل وظيفة «تنظيف الـ cache» في إضافة cache ووردبريس، وفي cache الخادم إن وُجد.
- الـ CDN: إن كنت تستخدم CDN، فأفرِغ (purge) الـ cache للملفات المعنية؛ وإلا فسيستمر الـ CDN في تقديم النسخة القديمة.
- الإجراء الدائم: كي لا تتكرّر هذه الخطوات مرارًا، قدّم الملفات بمعامل إصدار.
ثمة نقطة تستحق الانتباه: صفحة تظهر لك محدَّثة على شاشتك بصفتك مطوّرًا قد تظل قديمة على شاشة زوّارك. فبينما تُجري أنت تحديثًا قسريًا كثيرًا، تبقى النسخ القديمة في متصفحات الزوّار. لذلك للتأكد من ظهور التغيير لدى الجميع، يلزم تجديد الـ cache لا في متصفحك وحده، بل في طبقتَي الخادم والـ CDN أيضًا. والإصدار، وهو الحل الدائم، يزيل هذا الفرق تحديدًا: يتغيّر العنوان عند تغيّر الملف، فيحصل الجميع على النسخة الجديدة تلقائيًا.
باختصار، مشكلة «غيّرتُ لكن القديم يظهر» ليست خطأً، بل نتيجة طبيعية للـ cache. في موقع مُعدّ إعدادًا صحيحًا، تُصدَّر ملفات CSS وJavaScript تلقائيًا؛ فحين تُجري تغييرًا يرى الزائر بدوره نسخته المحدَّثة في زيارته التالية على أبعد تقدير. والبنية التي تُقلّل الحاجة إلى التنظيف اليدوي إلى أدنى حد تحفظ وقتك ووقت زائرك معًا.
الخدمات ذات الصلة: تصميم الويب والبرمجيات، البرمجيات وتطبيقات الحاسوب، تكامل الأنظمة
Leave a Reply