SmartKitio

التقنية

كيف يعمل متصفّح الويب فعلياً

يبدو المتصفّح بسيطاً: تكتب، تنتظر، ترى صفحة. في الداخل هو عميل شبكة، ومحلّل مستندات، ومحرّك تخطيط، وبيئة تشغيل لـ JavaScript، ومركّب طبقات يعمل ضمن مهلة ضيقة حتى يبقى التمرير سلساً.

7 دقائق قراءة · آخر تحديث 2026-10-04

شاشة حاسوب محمول تعرض شفرة في مساحة عمل خافتة الإضاءة
صورة عبر Unsplash · رخصة Unsplash

إجابة سريعة

عند فتح صفحة، يحوّل المتصفّح الرابط إلى طلبات شبكة، ويحوّل أول استجابة HTML إلى شجرة مستند حيّة، ويطبّق الأنماط، ويشغّل السكربتات، ويعيد تحويل الشجرة إلى بكسلات على الشاشة. لا خطوة من هذه اختيارية في موقع نموذجي: بدون الشبكة لا شيء لعرضه؛ بدون التخطيط لا موضع للنص؛ بدون التركيب ينهار التمرير السلس.

تنفّذ المتصفّحات الحديثة هذا العمل بالتوازي عبر عمليات وخيوط، لكن خيطاً رئيسياً واحداً ما زال ينسّق معظم ما تشعر به كـ«بطء». فهم هذا المسار يحوّل الشكاوى العامة («سفاري بطيء») إلى أسباب قابلة للإصلاح: إعادات توجيه زائدة، CSS يعطّل العرض، مهام JavaScript طويلة.

لماذا يهمّ الأمر

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

يُحسّن المطوّرون ضد هذا المسار سواء سمّوه أم لا. «تحميل الصور كسولاً»، و«تضمين CSS الحرج»، و«استخدام HTTP/2» كلها محاولات لاختصار الطريق من الرابط إلى بكسلات مستقرة. يستفيد المستخدمون حين تتوافق هذه الخيارات مع كيفية جدولة المتصفّح للعمل، لا مع folklore عن أي متصفّح «أسرع».

  • حدود الأمان (TLS، وسياسة نفس الأصل، وعزل المواقع) تعيش داخل نفس العميل الذي يرسم واجهتك.
  • الأداء محدود بأبطأ حلقة بين الشبكة والتحليل والسكربت والتخطيط والرسم — لا بإعلانات المعالج وحدها.
  • لوحات DevTools تطابق هذه المراحل مباشرة؛ تعلّم المسار يجعل اللوحات مفهومة.

المسار الأساسي

فكّر في تحميل الصفحة كسلسلة تحويلات. كل تحويل يستهلك مخرجات السابق وقد يطلق نشاط شبكة إضافي. أول استجابة HTML نادراً ما تكون آخر بايت يجلبها المتصفّح؛ إنها فهرس يشير إلى أوراق أنماط وسكربتات وخطوط وصور.

من الرابط إلى البكسلات
  1. URL

    تحليل المخطط والمضيف والمسار والاستعلام؛ الجزء (#) يبقى عند العميل.

  2. DNS

    حل اسم المضيف إلى IP عبر ذاكرة المحلّل أو بحث متكرّر.

  3. TCP / TLS

    فتح اتصال؛ مع https، التفاوض على التشفير والتحقق من الشهادة.

  4. HTTP

    إرسال الطلب؛ استلام الحالة والرؤوس والجسم (غالباً مضغوطاً).

  5. HTML → DOM

    تقطيع الرموز وبناء شجرة عناصر وعقد نص.

  6. CSS → CSSOM

    تحليل أوراق الأنماط إلى شجرة قواعد موازية.

  7. Layout

    دمج DOM + CSSOM في هندسة (أحجام ومواضع).

  8. Paint

    تسجيل أوامر الرسم في طبقات.

  9. Composite

    دمج GPU للطبقات للتمرير والرسوم.

المسار الحرج المبسّط لزيارة أولى عبر HTTPS.

يدخل JavaScript المخطط مرتين: مرة كبايتات تُجلب كأي مورد، ومرة كتنفيذ قد يغيّر DOM وCSSOM بعد أول تخطيط. لذلك قد تعطّل وسوم script بلا defer ولا async تحليل HTML — يجب أن يتوقف المحلّل حتى يُشغَّل السكربت إن وضعه المؤلف inline أو قبل بقية المستند.

DOM وCSSOM

نموذج كائن المستند (DOM) هو تمثيل المتصفّح في الذاكرة لـ HTML. ليس نسخة من الملف على القرص: المحلّل يصلح ترميزاً شائعاً، وينشئ عقداً لعناصر لم تكتبها صراحة (مثل tbody)، ويعرض واجهة برمجة يغيّرها السكربت وقت التشغيل.

نموذج كائن CSS (CSSOM) يحمل القواعد المحلّلة — المحدّدات والخصائص المتتالية والقواعد at-rule. لا يقرر المحرّك أي عناصر مرئية ولونها ودورها في flex أو grid إلا بعد وجود الشجرتين. ورقة أنماط ناقصة واحدة قد تغيّر تخطيط الصفحة كلها، لا مكوّناً واحداً فقط.

شجرة العرض، التخطيط، الرسم، التركيب

تربط شجرة العرض عقد DOM بالأنماط المحسوبة وتستبعد أشجاراً مخفية (display: none، ومحتوى head معيّن). التخطيط (reflow أيضاً) يمر على الشجرة ويعيّن صناديق بعرض وارتفاع وموضع. حين تقرأ offsetWidth في JavaScript أو تغيّر class يؤثر على الحجم، قد تجبر التخطيط على إعادة التشغيل — أحياناً مراراً في إطار واحد إن تناوب الكود بين الكتابة والقراءة.

يحوّل الرسم الصناديق إلى bitmaps أو قوائم عرض. يرفع التركيب بعض الطبقات ليحرّك أو يخفّي GPU دون إعادة رسم كل ما تحت. التحويلات والشفافية أرخص حين تبقى على خيط التركيب؛ تغيير العرض أو حجم الخط عادةً ليس كذلك.

أين تظهر الأعراض الشائعة

العرضغالباً مرتبط بـ
شاشة فارغة طويلة قبل المحتوىالشبكة أو TLS أو CSS/JS يعطّل العرض
نص بلا تنسيق ثم قفزةوصول CSS بعد أول رسم (FOUC)
تقطّع التمرير مع رسوممهام طويلة على الخيط الرئيسي أو رسم مفرط
تخطيط خاطئ بعد تفاعلسكربت غيّر DOM/CSS دون تجميع القراءات/الكتابات

العمليات والعزل

تقسّم متصفّحات سطح المكتب العمل بين عمليات لاحتواء الأعطال والهجمات. عملية عرض تمتلك عادة تبويباً أو مجموعة موقع؛ قد يعيش مكدس الشبكة في عملية منفصلة؛ للتركيب GPU مسار خاص. تطبّق متصفّحات الجوال الفكرة نفسها بميزانية ذاكرة أضيق، لذلك «تبويبات كثيرة» ما زالت تؤذي على الهاتف.

عزل المواقع (تقديم مستندات cross-origin في عمليات منفصلة عند الإمكان) يحدّ ما يستطيع أصل واحد استنتاجه عن آخر عبر قنوات جانبية. يعني أيضاً ذاكرة أكثر لكل تبويب. هذا المقايضة غير مرئية حتى تقارن مدخلات مدير المهام لعشرة مواقع أخبار مفتوحة دفعة واحدة.

JavaScript وحلقة الأحداث

لكل عارض محرّك JavaScript (V8، SpiderMonkey، JavaScriptCore، إلخ) يجمّع ويشغّل سكربتات الصفحة على الخيط الرئيسي إلى جانب التحليل وكثير من التخطيط. تأخذ حلقة الأحداث مهاماً من طوابير: إدخال المستخدم، استدعاءات الشبكة، مؤقتات، وتفاعلات الوعود. مهمة تمتد مئات الملي ثانية تعطّل الإدخال والرسوم طوالها — لا يوجد خيط رئيسي متوازٍ لكل تبويب لعمل DOM.

واجهات الويب (fetch، setTimeout، IndexedDB) ينفّذها المتصفّح؛ JavaScript يجدول العمل ويستقبل استدعاءات عند اكتمال I/O. صيغة async/await ما زالت تُحل على طابور microtask الذي يُشغَّل قبل macrotask التالي. حلقات متزامنة ثقيلة إذن تجوّع العرض حتى داخل دالة async.

javascript
// Reading layout after writing forces extra layout work.
box.style.width = "100px";
const w = box.offsetWidth; // layout
box.style.height = w + "px"; // another layout pass if repeated in a loop

Workers وservice workers يشغّلان سكربتاً خارج الخيط الرئيسي، لكن الخيط الرئيسي وحده قد يلمس DOM الصفحة التي تراها. انقل الحساب، لا تحديثات DOM المباشرة.

لماذا تبدو الصفحات بطيئة

البطء نادراً ما له سبب واحد فقط. معالج سريع على شبكة بطيئة ما زال ينتظر TLS وصوراً كبيرة. شبكة سريعة مع ميغابايت JavaScript ما زالت تنتظر التحليل والتجميع قبل أن تُظهر أُطر الترطيب واجهة تفاعلية. القياس دون فصل الشبكة وسكربت الخيط الرئيسي والتخطيط/الرسم يوزّع الجهد خطأ.

  1. زمن الشلال: DNS، مصافحات TCP/TLS، وإعادات التوجيه المتسلسلة تضيف رحلات ذهاب وإياب قبل HTML.
  2. موارد تعطّل العرض: CSS في head وسكربت متزامن بلا defer يؤخر أول رسم.
  3. احتكار الخيط الرئيسي: مهام طويلة من أُطر أو تحليلات أو عمل DOM غير مجمّع.
  4. إرهاق التخطيط: قراءات هندسة وكتابات أنماط متداخلة في معالجات الاستجابة.
  5. رسم زائد وصور ضخمة: تكلفة فك الترميز والرسم تتناسب مع البكسلات، لا حجم الملف على السلك فقط.

تغيّر الذاكرة المؤقتة القصة في الزيارات المتكررة: رؤوس cache في HTTP، وذاكرة داخل المتصفّح، واستراتيجيات service worker قد تتخطى أجزاء المسار. الزيارة الأولى تبقى اختبار إجهاد صادق لخيارات الهندسة.

استخدام أدوات المطوّر

لوحة Network نص HTTP(S): رموز الحالة، أشرطة التوقيت، ورؤوس الاستجابة. رتّب حسب المدة لترى إن كان TLS أو الانتظار (TTFB) يهيمن. عطّل الذاكرة المؤقتة عند تصحيح سلوك التحميل الأول حتى لا يخدعك cache دافئ محلي.

لوحة Performance تسجّل مكدس الخيط الرئيسي. ابحث عن كتل صفراء طويلة (سكربت) يليها بنفسجي (تخطيط/رسم). لوحة Elements تعرض DOM الحي والأنماط المحسوبة — مفيدة حين الصفحة على الشاشة لم تعد تطابق مصدر HTML لأن السكربت أعاد كتابة الشجرة.

  • راجع عمود Initiator لمعرفة أي سكربت أطلق الجلب.
  • استخدم Coverage للعثور على بايتات CSS أو JS مُحمّلة وغير مستخدمة في المسار الحالي.
  • خنق CPU والشبكة في DevTools لإعادة ظروف الجوال على سطح المكتب.

جرّب بنفسك

يمكنك لمس البدائيات نفسها التي يعتمد عليها المتصفّح دون تشغيل مكدس عرض كامل. ترميز نسبي لسلسلة استعلام يعكس ما يحدث قبل وصول البايتات إلى السلك؛ فك الترميز يبيّن كيف يصبح %20 مسافة في منطق التطبيق. البحث عن رمز حالة HTTP يربط أرقام الاستجابة بمرحلة الجلب في المخطط أعلاه.

  • مُرمّز URL — ترميز الأحرف المحجوزة في المسار أو مقاطع الاستعلام.
  • فاك تشفير URL — فحص كيف تعود التسلسلات المرمّزة إلى نص Unicode.
  • البحث عن رموز HTTP — معنى 301 و404 و503 للذاكرة المؤقتة والعملاء.

اربط هذه الأدوات بأدلة ترميز URL ورموز HTTP للقواعد التي تطبّقها الخوادم والذاكرة المؤقتة حين ترى طلباتك.

قراءة إضافية

مواصفات ووثائق

  1. MDN — كيف تعمل المتصفّحات (نظرة عامة)
  2. WHATWG — معيار HTML الحي — خوارزميات التحليل وما يتعلق بـ DOM.
  3. RFC 9110 — دلالات HTTP — الطرق، رموز الحالة، التخزين المؤقت.
  4. MDN — المسار الحرج للعرض

مقالات ذات صلة