انتقل إلى محتوى الدرس
الدرس 45
دورة تكنولوجيا الويب

كيف تحمّل المتصفحات المواقع وتعرضهاHow Web Browsers Load Websites

افهم بعمق هندسي مسار العرض الحرج داخل المتصفح؛ كيف تتحول أكواد HTML وCSS إلى شجرتي DOM وCSSOM وشجرة العرض، والفرق بين إعادة التخطيط Reflow وإعادة الرسم Repaint والتركيب عبر GPU.
أقسام الدرس
8
الأمثلة
3
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
3
محتوى الدرس
في هذا الدرس 8تصفّح المواضيع

عرفنا في الدرس السابق أن محرك العرض ( مثل و و) هو القلب النابض داخل المتصفح. ولكن كيف تتحول البايتات النصية الخام القادمة من الخادم إلى شجرة عناصر حية وبكسلات ملونة تُرسم على شاشتك في أقل من 16 مللي ثانية؟ تُعرف هذه الرحلة الهندسية الدقيقة باسم مسار العرض الحرج ().

قبل الغوص في التفاصيل الهندسية، استعرض جدول المصطلحات التقنية الأساسية لهذا الدرس:

المصطلح بالعربية المصطلح بالإنجليزية النطق التقني المعنى الهندسي المبسط
مسار العرض الحرج كريتيكال ريندرينج باث سلسلة المراحل الهندسية التي ينفذها المتصفح لتحويل أكواد HTML وCSS وJS إلى بكسلات مرئية على الشاشة.
شجرة كائنات المستند دوم تري التمثيل الشجري الحي لعناصر صفحة HTML في ذاكرة المتصفح والذي يمكن التفاعل معه عبر جافاسكريبت.
شجرة كائنات التنسيق سي إس إس أوم الشجرة التي يبنيها المتصفح بعد حساب جميع قواعد وأولويات CSS المطبقة على عناصر الصفحة.
شجرة العرض المرئية ريندر تري ناتج دمج شجرتي DOM وCSSOM معاً، وتضم العناصر المرئية فقط التي ستُطبع فعلياً على الشاشة.
حساب التخطيط وإعادة التخطيط لاي آوت / ريفلو حساب العرض والارتفاع والإحداثيات الهندسية الدقيقة لكل صندوق على الشاشة حسب حجم النافذة.
الطلاء والتركيب المسرع بينت آند كومبوزيتنج تلوين البكسلات وتقسيمها لطبقات يركبها معالج الرسوميات GPU بسرعة 60 إطاراً في الثانية.
مخطط مسار العرض الحرج من بناء شجرة DOM وشجرة CSSOM حتى التخطيط والطلاء والتركيب عبر GPU

بمجرد وصول أول دفعة من بايتات ملف عبر الشبكة، يبدأ محلل المتصفح بتنفيذ أربع خطوات متسلسلة لبناء شجرة كائنات المستند ():

  1. 1. تحويل البايتات إلى حروف (): يقرأ المتصفح الأرقام الثنائية الخام ويترجمها إلى حروف نصية وفق نظام الترميز المحدد في الملف (وهو قياسياً ).
  2. 2. التقطيع اللغوي إلى رموز (): يقسم المحلل النص إلى وحدات معيارية () مثل وسم بداية ووسم نهاية ومحتوى نصي.
  3. 3. إنشاء العقد البرمجية (): يُحوّل كل رمز إلى كائن برمجي مستقل في الذاكرة يُسمى عقدة () يحمل خصائص العنصر وسماته.
  4. 4. ربط شجرة : يربط المحلل هذه العقد في علاقة أب وابن وشقيق لتكوين شجرة هرمية تبدأ من الجذر .
HTML
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>CloseTag DOM</title>
  </head>
  <body>
    <h1 id="hero-title">Web Rendering</h1>
    <p class="lead">Fast DOM Tree Construction</p>
  </body>
</html>

أثناء بناء شجرة ، يصادف المتصفح وسم ربط ملف التنسيق فيبدأ بتحويل قواعد التنسيق إلى شجرة موازية في الذاكرة تُسمى شجرة كائنات التنسيق ().

تتميز شجرة بتطبيق مبدأ التعاقب والوراثة ()؛ حيث ترث العناصر الفرعية تلقائياً خصائص الخط واللون من العناصر الأب، مع إعطاء الأولوية للمحددات الأكثر تخصيصاً.

فور اكتمال شجرتي و، يدمجهما محرك العرض معاً لتكوين شجرة العرض المرئية () ثم ينتقل لمرحلة حساب التخطيط ():

  • ضم العناصر المرئية فقط: تستبعد شجرة العرض جميع الوسوم غير المرئية بطبيعتها (مثل و) وكذلك أي عنصر يحمل خاصية الإخفاء التام .
  • الفرق الهندسي بين و: العنصر ذو يُحذف تماماً من شجرة العرض فلا يحجز أي مساحة؛ أما العنصر ذو فيبقى داخل شجرة العرض لأنه يحجز مساحته الهندسية كصندوق شفاف.
  • مرحلة حساب التخطيط (): يحسب المتصفح الإحداثيات الدقيقة والعرض والارتفاع بالبكسل لكل صندوق بناءً على أبعاد شاشة الجهاز ().

تأمل المخطط الآتي الذي يوضح عملية الدمج والفلترة لتوليد شجرة العرض:

مخطط يوضح دمج شجرتي DOM وCSSOM لتكوين شجرة العرض واستبعاد العناصر غير المرئية

بعد معرفة أبعاد ومكان كل عنصر في مرحلة التخطيط، ينفذ المتصفح المرحلتين الأخيرتين لإظهار الصفحة أمام عين المستخدم:

  1. 1. مرحلة الطلاء والرسم (): يحول المتصفح الصناديق الهندسية إلى أوامر رسم فعلية تشمل تعبئة الألوان الخلفية، ورسم الحروف النصية، والصور، والحدود، والظلال.
  2. 2. مرحلة تركيب الطبقات عبر المعالج الرسومي (): لتجنب إعادة رسم الصفحة كاملة عند تحريك عنصر واحد، يقسم المتصفح عناصر الصفحة المتراكبة أو المتحركة إلى طبقات مستقلة ()، ويتولى معالج الرسوميات () دمجها وعرضها على الشاشة بسرعة 60 إطاراً في الثانية (أي بميزانية زمنية قدرها فقط لكل إطار).

يمنحك فهم مسار العرض قدرة هندسية فائقة على كتابة واجهات سريعة وسلسة؛ لأن تعديل خصائص ينقسم من حيث تكلفة الأداء إلى ثلاث درجات:

  • 1. إعادة التخطيط الكامل ( — الأعلى تكلفة): عند تغيير خاصية هندسية تغير أبعاد أو موقع العنصر (مثل أو أو أو )، يضطر المتصفح لإعادة حساب مواقع العناصر المجاورة وتنفيذ المراحل الثلاث: التخطيط ثم الطلاء ثم التركيب.
  • 2. إعادة الطلاء فقط ( — متوسطة التكلفة): عند تغيير لون النص أو الخلفية () دون المساس بأبعاد الصندوق، يتخطى المتصفح مرحلة التخطيط وينفذ الطلاء والتركيب فقط.
  • 3. التركيب المباشر عبر ( — الأسرع على الإطلاق): عند تحريك العناصر باستخدام أو تغيير شفافيتها بـ ، يتخطى المتصفح التخطيط والطلاء معاً وينفذ الحركة مباشرة على معالج الرسوميات بسلاسة فائقة!

جرّب المحاكي التفاعلي الآتي لمقارنة المسارات الثلاثة وتأثيرها على سرعة الإطارات:

عندما يصادف محلل وسم سكربت تقليدياً بدون سمات تحكم، فإنه يضطر إلى إيقاف بناء شجرة مؤقتاً حتى ينتهي تنزيل وتنفيذ ملف الجافاسكريبت! السبب الهندسي هو أن الكود البرمجي قد يغير محتوى الصفحة أو يقرأ عناصرها أثناء التحميل.

لتسريع مسار العرض ومنع هذا التوقف، يوفر معيار سمتين أساسيتين لتحميل السكربتات الخارجية بكفاءة:

  • السمة (الخيار القياسي الموصى به لسكربتات الموقع): يُنزّل المتصفح الملف بالتوازي دون إيقاف تحليل ، ويؤجل تنفيذه بالترتيب الصحيح حتى تكتمل شجرة بالكامل.
  • السمة (للسكربتات المستقلة كالإحصائيات): يُنزّل الملف بالتوازي وينفذه فور انتهاء تنزيله دون اشتراط ترتيب معين.
HTML
<!-- 1. Recommended: Non-blocking download, executes in order after DOM is ready -->
<script defer src="/js/app-bundle.js"></script>

<!-- 2. Independent analytics script: downloads and runs asynchronously -->
<script async src="/js/analytics.js"></script>

يطلق المتصفح حدثين برمجيين رئيسيين يتيحان للمطور تتبع اكتمال مراحل مسار العرض الحرج وقياس سرعتها بدقة:

  • حدث اكتمال الشجرة : ينطلق فور انتهاء المتصفح من تحليل وبناء شجرة وتنفيذ السكربتات المؤجلة ()، دون انتظار اكتمال تنزيل الصور الكبيرة.
  • حدث التحميل الكامل : ينطلق بعد اكتمال تحميل الصفحة وجميع مواردها الفرعية من ملفات تنسيق وصور وخطوط.
JavaScript
document.addEventListener("DOMContentLoaded", () => {
  console.log("1. DOM Tree is ready for interactive JS!");
});

window.addEventListener("load", () => {
  const nav = performance.getEntriesByType("navigation")[0];
  console.log("2. Full Load (ms):", Math.round(nav.loadEventEnd));
});
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

تعلّمنا في هذا الدرس رحلة مسار العرض الحرج () داخل محرك المتصفح؛ بدءاً من تحويل بايتات إلى شجرة ، وتحليل قواعد التنسيق في شجرة ، ودمجهما في شجرة العرض المرئية ()، والفرق الهندسي بين إعادة التخطيط () وإعادة الطلاء () والتركيب عبر ، وتحميل السكربتات بسمتي و. الخطوة التالية: انتقل الآن إلى الدرس التالي أدوات مطور المتصفح DevTools () لتتعلم كيف تفحص وتعدل شجرة الحية وتراقب الشبكة والأداء عملياً!

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات12

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 12 مفهومةأول بطاقة، أول خطوة
01 Critical Rendering Path (CRP) مسار العرض الحرج
سلسلة المراحل الهندسية التي ينفذها المتصفح لتحويل أكواد HTML وCSS وJS إلى بكسلات مرئية على الشاشة.
للمراجعة
02 Document Object Model (DOM) نموذج كائنات المستند DOM
التمثيل الشجري الهرمي الحي لعناصر صفحة HTML في ذاكرة المتصفح والذي يمكن قراءته وتعديله عبر جافاسكريبت.
للمراجعة
03 CSS Object Model (CSSOM) نموذج كائنات التنسيق CSSOM
الشجرة البرمجية التي يبنيها المتصفح من ملفات CSS لحساب القواعد الموروثة والأولويات لكل عنصر.
للمراجعة
04 Render Tree شجرة العرض المرئية
الشجرة الناتجة عن دمج DOM وCSSOM معاً وتضم العناصر المرئية فقط (بعد استبعاد head وscript وdisplay:none).
للمراجعة
05 Layout (Reflow) حساب التخطيط وإعادة التخطيط
مرحلة حساب الأبعاد الهندسية الدقيقة والموقع الفعلي بالبكسل لكل عنصر مرئي داخل نافذة العرض.
للمراجعة
06 Paint (Repaint) مرحلة الطلاء وإعادة الرسم
مرحلة تلوين العناصر ورسم النصوص والحدود والظلال والصور داخل الصناديق التي حُسبت أبعادها.
للمراجعة
07 GPU Compositing تركيب الطبقات عبر GPU
تقسيم عناصر الصفحة المتحركة أو المتراكبة إلى طبقات مستقلة يدمجها معالج الرسوميات GPU بسرعة 60 إطاراً بالثانية.
للمراجعة
08 Render-Blocking Resource مورد حاجز للعرض
ملف (مثل ملفات CSS الأساسية) يوقف المتصفح عملية رسم الصفحة لحين اكتمال تنزيله وتحليله لمنع تشوه المظهر.
للمراجعة
09 Flash of Unstyled Content (FOUC) وميض المحتوى غير المنسق
ظهور الصفحة لحظياً بشكل نصي خام غير منسق قبل تطبيق قواعد CSS، وهو ما يمنعه المتصفح بانتظار شجرة CSSOM.
للمراجعة
10 Script Defer Attribute سمة التأجيل المنظم defer
سمة في وسم script تسمح بتنزيل ملف جافاسكريبت بالتوازي دون إيقاف تحليل HTML وتنفذه بالترتيب فور اكتمال شجرة DOM.
للمراجعة
11 DOMContentLoaded Event حدث اكتمال شجرة DOMContentLoaded
حدث ينطلق فور اكتمال بناء شجرة DOM وتنفيذ السكربتات المؤجلة دون انتظار انتهاء تنزيل الصور.
للمراجعة
12 Layout Thrashing الاستنزاف المتكرر للتخطيط
مشكلة أداء تحدث عندما يكرر الكود تعديل التنسيق ثم قراءة الأبعاد الهندسية مباشرة داخل حلقة برمجية.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات5

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 5 مفهومةأول بطاقة، أول خطوة
01 CRP CRP
Critical Rendering Path
مسار العرض الحرج لتحويل أكواد الويب إلى بكسلات مرئية.
للمراجعة
02 DOM DOM
Document Object Model
نموذج كائنات المستند الشجري الناتج عن تحليل HTML.
للمراجعة
03 CSSOM CSSOM
CSS Object Model
نموذج كائنات التنسيق الناتج عن تحليل ملفات CSS.
للمراجعة
04 FOUC FOUC
Flash of Unstyled Content
وميض ظهور المحتوى بدون تنسيق قبل تطبيق قواعد CSS.
للمراجعة
05 GPU GPU
Graphics Processing Unit
وحدة معالجة الرسوميات المسؤولة عن تسريع رسم وتركيب طبقات الصفحة.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/3مهام منجزة
  1. قارن بين عنصر يحمل display: none وآخر يحمل visibility: hidden وحدد أيهما يبقى في شجرة العرض Render Tree ويحجز مساحة في التخطيط.

  2. استبدل تحريك عنصر عبر خاصيتي top/left المكلفة بخاصية transform: translateX() لتخطي مرحلتي التخطيط والطلاء والعمل مباشرة على GPU.

  3. أضف مستمعي أحداث لـ DOMContentLoaded وload في صفحة تجريبية واطبع التوقيت الزمني لكل منهما لملاحظة أيهما يسبق الآخر.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

12أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي12 أسئلة تنتظرك
01

ما الترتيب الهندسي الصحيح للمراحل الأساسية في مسار العرض الحرج (Critical Rendering Path) داخل المتصفح؟

02

أثناء تحليل ملف HTML، ما التسلسل الدقيق لتحويل البيانات الخام القادمة من الشبكة إلى شجرة DOM؟

03

لماذا يتعامل المتصفح مع ملفات التنسيق CSS كموارد «حاجزة للعرض» (Render-Blocking) افتراضياً؟

04

كيف تتعامل شجرة العرض (Render Tree) مع عنصر يحمل الخاصية "display: none" مقارنة بعنصر يحمل "visibility: hidden"؟

05

صواب أم خطأ: الوسوم غير المرئية مثل <head> و<meta> و<script> توجد داخل شجرة DOM لكنها تُستبعد تماماً من شجرة العرض المرئية (Render Tree).

06

لتحقيق عرض سلس بسرعة 60 إطاراً في الثانية (60fps)، كم تبلغ الميزانية الزمنية التقريبية المتاحة للمتصفح لإنجاز كل إطار واحد؟

07

أيّ تغيير في خصائص CSS الآتية يتسبب في إعادة حساب التخطيط الهندسي (Reflow / Layout) بالإضافة إلى الطلاء والتركيب؟

08

ما الخاصيتان المثاليتان في CSS لتنفيذ الحركات الانتقالية السلسة (60fps) لأن المتصفح ينفذهما في مرحلة تركيب GPU دون الحاجة لإعادة التخطيط أو الطلاء؟

09

كيف يتعامل المتصفح مع ملف جافاسكريبت خارجي يحمل السمة "defer" (<script defer src="app.js">)؟

10

صواب أم خطأ: وضع وسم <script src="app.js"></script> تقليدي داخل <head> بدون سمتي defer أو async يوقف بناء شجرة DOM مؤقتاً حتى ينتهي تنزيل وتنفيذ السكربت.

11

أيّ الحدثين ينطلق أولاً في دورة حياة الصفحة: حدث "DOMContentLoaded" أم حدث التحميل الكامل "load"؟

12

ما السبب البرمجي لحدوث مشكلة «استنزاف التخطيط المتزامن» (Layout Thrashing) في كود JavaScript؟