لقد ضغطت صورك. اخترت استضافة سريعة. خادمك يستجيب في أقل من 200 مللي ثانية. ومع ذلك، لا تزال صفحتك تبدو وكأنها تزحف قبل ظهور أي شيء. في تسع من كل عشر حالات، السبب هو موارد تعيق العرض تجلس بهدوء بين المتصفح ومحتواك.
هذه مشكلة أداء موجودة منذ أكثر من عقد، وما زالت أول شيء يظهر باللون الأحمر في تقارير PageSpeed Insights أو Lighthouse. إليك سبب استمرار هذه المشكلة، وما الذي يحلها فعلياً.
ما هي الموارد التي تعيق العرض فعلياً
عندما يحمّل المتصفح صفحتك، يقرأ HTML من الأعلى إلى الأسفل ويبني ما يسمى DOM. في الوقت نفسه، يحتاج إلى CSS لبناء CSSOM، الذي يخبره كيف يجب أن يبدو كل شيء. لا يستطيع المتصفح رسم أي بكسل حتى يكون كلاهما جاهزاً.
ملفات CSS تعيق العرض بشكل افتراضي. وكذلك أي JavaScript يُحمّل دون خاصيتي async أو defer، لأن المتصفح يضطر للتوقف، وتحميل السكريبت، وتنفيذه، ثم فقط بعد ذلك يكمل تحليل بقية الصفحة.
تخيل هذا: صفحتك تشير إلى ملف تنسيق بحجم 150 كيلوبايت وثلاثة سكريبتات متزامنة في <head>. يصل المتصفح إلى الأول، يوقف كل شيء، يجلبه عبر الشبكة، وينتظر. افعل ذلك أربع مرات قبل ظهور أي كلمة على الشاشة، وستكون قد أضفت ثوانٍ، لا أجزاء من الثانية، إلى وقت التحميل.
لماذا لا يزال هذا مهماً لـ Core Web Vitals
تضر الموارد التي تعيق العرض بشكل مباشر اثنين من مقاييس Core Web Vitals الثلاثة:
- Largest Contentful Paint (LCP) - إذا كان CSS أو JS يؤخر العرض، فإن صورتك الرئيسية أو عنوانك الرئيسي لا يمكن أن يُرسم حتى تنتهي الموارد المعيقة. تريد Google أن يكون LCP أقل من 2.5 ثانية.
- First Contentful Paint (FCP) - يقيس هذا المقياس أول بكسل يظهر على الشاشة، ويتحكم فيه تقريباً بشكل كامل طلبات تعيق العرض في المسار الحرج.
موقع يحتوي على 2-3 ملفات تنسيق تعيق العرض وعدد من سكريبتات الطرف الثالث المتزامنة يخسر عادة بين 800 مللي ثانية و1.5 ثانية قبل ظهور أي شيء مرئي. هذا هو الفرق بين النجاح والفشل في درجة Core Web Vitals، وهو إشارة ترتيب تستخدمها Google فعلياً.
كيف تحدد الموارد التي تعيق العرض في موقعك
قبل إصلاح أي شيء، اكتشف ما الذي يعيق العرض فعلياً. بعض الطرق الموثوقة:
- مرّر رابط موقعك عبر Lighthouse أو PageSpeed Insights وتحقق من فحص "التخلص من الموارد التي تعيق العرض". سيسرد كل ملف مخالف مع التوفير المقدر بالمللي ثانية.
- افتح Chrome DevTools، اذهب إلى تبويب Network، وصفِّ حسب CSS وJS. أي شيء يُحمّل قبل علامة "First Paint" في الجدول الزمني هو مشتبه به.
- استخدم عرض الشلال في WebPageTest لترى بالضبط أي الطلبات تؤخر بداية خط العرض.
ستجد عادة المشتبه بهم المعتادين: ملف التنسيق الرئيسي لقالب ما، استيراد Google Fonts، سكريبت شريط متحرك، وبعض علامات التحليل المحملة دون defer.
تقنيات تحسين سرعة الموقع التي تحل هذه المشكلة فعلياً
1. استخدم defer وasync مع JavaScript
معظم السكريبتات لا تحتاج لإيقاف عملية التحليل. أضف defer لأي شيء يتعامل مع DOM بعد تحميله، وasync للسكريبتات المستقلة مثل أدوات التحليل:
<script src="/analytics.js" async></script>
<script src="/app.js" defer></script>
هذا التغيير البسيط وحده غالباً ما يوفر 300-600 مللي ثانية على المواقع التي تحتوي على عدة علامات طرف ثالث.
2. ضمّن CSS الحرج مباشرة، وأجّل الباقي
لست بحاجة لكامل ملف التنسيق البالغ 200 كيلوبايت لرسم الشاشة الأولى. استخرج CSS المطلوب للمحتوى الظاهر أعلى الصفحة، ضمّنه مباشرة داخل <head> في HTML، وحمّل الباقي بشكل غير متزامن بمجرد ظهور الصفحة. هذه من أكثر تقنيات تحسين سرعة الموقع فعالية لأنها تتيح للمتصفح الرسم فوراً بدلاً من انتظار تحميل ملف تنسيق كامل.
3. أزل CSS غير المستخدم
العديد من القوالب وأدوات بناء الصفحات تأتي بأطر CSS تستخدم منها ربما 15% فقط من القواعد. حذف الـ85% غير المستخدمة يقلص حجم الملف بشكل كبير ويسرّع بناء CSSOM، الذي يحدث قبل بدء أي عرض.
4. صغّر الملفات وادمجها حيث يفيد ذلك
الملفات الأقل والأصغر تعني رحلات أقل. التصغير يزيل الفراغات والتعليقات، بينما الدمج يقلل عدد طلبات HTTP، رغم أن هذا أقل أهمية مع HTTP/2 مما كان عليه سابقاً.
5. أجّل JavaScript غير الضروري حتى تفاعل المستخدم
سكريبتات نوافذ الدردشة أو النوافذ المنبثقة أو بكسلات التتبع نادراً ما تحتاج للعمل قبل أن يقوم المستخدم فعلياً بشيء ما. تأجيل تنفيذها حتى أول تمرير أو نقرة أو مهلة قصيرة يبقي الخيط الرئيسي حراً أثناء التحميل الأولي، مما يحسّن كلاً من LCP واستجابة التفاعل.
إذا كنت تستخدم WordPress، فإن هذا النوع من التحكم في CSS الحرج وإزالة CSS غير المستخدم وتأجيل JS هو بالضبط ما يجب أن يقدمه إعداد قوي لـتحسين سرعة WordPress، ويفضل أن يكون ذلك بزر واحد بدلاً من عملية بناء يدوية تكررها بعد كل تحديث للقالب.
مثال واقعي
خذ موقع WordPress نموذجي: ملف تنسيق قالب بحجم 180 كيلوبايت، Google Fonts محمّلة عبر @import، وأربعة سكريبتات إضافات في الهيدر دون defer. قبل التحسين، يكون FCP حوالي 2.8 ثانية على اتصال 4G.
بعد تضمين CSS الحرج، تأجيل ملف التنسيق الكامل، إضافة defer لكل السكريبتات غير الضرورية، وإزالة قواعد CSS غير المستخدمة، غالباً ما تنخفض نفس الصفحة إلى 1.1-1.4 ثانية FCP. دون ترقية خادم، ودون تغيير CDN، فقط بإزالة العوائق بين المتصفح والبكسلات.
أين تندرج الاستضافة في هذه الصورة
إصلاحات تعيق العرض تحدث على مستوى الكود والأصول، لكن بيئة الاستضافة لا تزال مهمة. خادم بأوقات استجابة سريعة يمنح المتصفح بداية أفضل قبل أن يصل حتى إلى عنق الزجاجة الخاص بـ CSS وJS. رأينا مواقع تصلح كل مشكلة تعيق عرض بشكل مثالي وتظل بطيئة لأن وقت استجابة الخادم كان يأكل ثانية كاملة قبل أن يبدأ المتصفح حتى في التحليل.
إذا أردت التعمق أكثر في المقياس الذي يقيس هذا التأخير من جانب الخادم، فقد تناولناه في لماذا يكلفك وقت الاستجابة الأول (TTFB) تحويلات. وإذا كانت مشكلتك تحديداً هي تضخم CSS، فمقالنا عن كيف يسرّع التخزين المؤقت موقع WordPress يستحق القراءة أيضاً.
الخلاصة
تظل الموارد التي تعيق العرض القاتل الأول للأداء لأنها تقف تماماً في اللحظة التي يكوّن فيها الزائر انطباعه الأول عن موقعك. إصلاحها لا يتعلق بشراء قوة خادم أكبر، بل بأن تكون واعياً بما يعيق المتصفح وما لا يعيقه. افحص مسار العرض في موقعك اليوم، أجّل ما يمكن تأجيله، ضمّن ما هو حرج، وأزل ما لا تستخدمه. من هنا تأتي مكاسب تحسين سرعة الموقع الحقيقية، وليس من مطاردة أجهزة أكبر.