STATUS IS UPويكي تحسين المواقع
25تسريع
الأداء والتسليم / تسريع

أداء JavaScript: تقليل عمل الخيط الرئيسي

اكتشف JavaScript الذي يجعل الصفحة تتردد أو يؤخر استجابتها، وأزل العمل غير الضروري، واحمِ التفاعلات.

أداء JavaScript: تقليل عمل الخيط الرئيسي — دليل بصري
اقرأ
8 دقائق
المصادر
5
أعد التحقق
2027-03-27
مُراجع
مراجع أول لأداء الويب (Senior Web Performance Reviewer)
الإجابة المختصرة

ابدأ بالقرار.

قلِّل عمل الخيط الرئيسي بقياس صفحة وتفاعل حقيقيَّين، ثم أصلح أكبر تكلفة قابلة للتكرار. ينفّذ الخيط الرئيسي معظم أعمال JavaScript وواجهة المستخدم في الصفحة، مهمةً تلو أخرى. تُعدّ المهمة التي تزيد مدتها على 50 ملّي ثانية مهمةً طويلة، لذا قد تنتظر خلفها نقرة أو لمسة أو تمرير أو عملية رسم. ابدأ بإتمام الشراء والبحث والتنقّل والنماذج وغيرها من الرحلات الحسّاسة.

لكل تكلفة، أزلها أو أجّلها حتى الحاجة، أو اقسمها إلى دفعات قصيرة، أو انقل الحِسابات المحصورة إلى Web Worker. احتفظ بالاستجابة الفورية على الخيط الرئيسي، ولكن أجّل التحليلات والمتابعات غير الضرورية. عامل كل وسم طرف ثالث كتبعٍ إنتاجي له مالك. أعد الاختبار على CPU محمول مقيد واحتفظ بإمكانية التراجع للرحلات الحرجة.

دليل بصري

انظر إلى العمل كنظام.

استخدم هذه الخريطة لربط قرارات المقال قبل تنفيذ التكتيكات الفردية.

SIUتسريع
01قيّم رحلة العميل قبل تعديل الكود
02اقرأ التتبع كقائمة انتظار للعمل
03اشحن رمزًا أقل وقتما يهم
04قسّم العمل حتى يتمكن المتصفح من الاستجابة
01

قيّم رحلة العميل قبل تعديل الكود

اختر مساراً وتفاعلاً مهماً واحداً، مثل فتح القائمة، تصفية النتائج، أو إرسال نموذج. سجِّله في لوحة Performance في Chrome DevTools من حالة متصفح نظيفة. كرّر الإجراء والتقط تسجيلًا بتشغيل CPU مُقَيَّد وأيضاً بتشغيل على جهاز تطوير؛ آثار سطح المكتب قد تُخفي العمل الذي يُزعج على هاتف منخفض القوة.

استخدم التتبّع لاختبار فرضية محددة، لا لإلقاء اللوم على مكوّن استنادًا إلى تقرير الحزمة. في مخطط الشعلات Main flame chart، تعني الأشرطة الأعرض وقتًا أطول، وتُظهر الأشرطة المتراكبة مكدس الاستدعاءات. يشير مثلث أحمر على مهمة إلى احتمال كونها مهمة طويلة؛ حدّدها واتبع رابط الشيفرة التي بدأتها. احفظ تتبعات قبل وبعد للتغييرات المهمة.

التقاط اللحظة

سجِّل قبل الإجراء بقليل وأوقف بعد الوصول إلى النتيجة المرئية.

استخدم حالة قابلة للتكرار

حافظ على المسار، حالة الحساب، وتسلسل الإجراءات ثابتة.

سمِّ مالكًا

عيّن كل تكلفة عليا إلى الفريق أو البائع القادر على تغييرها.

02

اقرأ التتبع كقائمة انتظار للعمل

المهمة الطويلة هي عتبة للتحقيق، وليست تشخيصًا كاملاً. يبلّغ معيار W3C Long Tasks عن المهام التي تستغرق 50 ملّي ثانية أو أكثر. انظر تحت المهمة إلى تقييم JavaScript، معالج حدث، إعادة حساب الأنماط، التخطيط، أو الرسم. يحدد مكدس الاستدعاءات مكان البداية؛ وتُظهر التوقيتات ما إذا كانت المشكلة في الشيفرة، العرض، أو إطار طرف ثالث.

أعطِ الأولوية للتكاليف التي تتكرر أثناء تفاعل ذي قيمة. قد يبدو معالج قصير بطيئًا إذا أدى إلى تخطيط الصفحة أو انتظر خلف عمل سابق. التتبّع قياس مخبري؛ لذا أكّد الإصلاح على أجهزة ممثلة، واستخدم عند التوفر قياسات ميدانية تراعي الخصوصية.

افصل بين اللحظات

تتطلب معالجة التحميل الأولي حلولًا مختلفة عن معالج ما بعد اللمس.

افحص عملية العرض

اعثر على أنماط كتابة أنماط متكررة وقراءة تخطيط قبل إعادة البناء.

حافظ على خط أساس

أرفق التتبع، السيناريو، وأعلى التكاليف إلى عنصر العمل.

03

اشحن رمزًا أقل وقتما يهم

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

اسأل إن كان المكوّن يحتاج إلى إطار عمل كامل على جهة العميل، أو إن كانت أداة ما تكرر قدرة موجودة، أو إن كان HTML ثابتًا مع تحسين بسيط كافيًا. اختبر الحالة الاحتياطية للموديول المؤجل. ينبغي أن تؤجل الصفحة الميزة الاختيارية بسلاسة بدلًا من إظهار عنصر تحكم غير فعّال.

ابنِ ميزانية مسار

وثّق السكربتات المسموح بها على المسار ولماذا.

التحميل عند النية

فكّر في هذا للمحررات الاختيارية، الخرائط، المشغلات، أو شاشات التقارير.

حمِ طرق حاسمة

اختبر المصادقة، الوصولية، الدفع، وإكمال النماذج؛ واحصل على مراجعة مؤهلة عندما تتأثر عناصر التحكم.

04

قسّم العمل حتى يتمكن المتصفح من الاستجابة

تسمية الدوال الصغيرة لا تخلق مهام متصفح منفصلة عندما تُشغّل متزامنًا. لِحَلقة طويلة، اقسم العمل إلى دفعات، حدّث الحالة المرئية الفورية، ثم امنح المتصفح فسحة قبل المتابعة. هذا يسمح للمتصفح بمعالجة المدخلات والرسم بين الدفعات.

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

ضع واجهة المستخدم أولًا

أظهر القبول أو التقدّم قبل العمل المتابع غير المرئي.

جَمّع حسب الزمن المنقضي

أفسح المجال للمتصفح قبل أن يصبح العمل المقاس طويلًا، بدلًا من فعل ذلك مرةً لكل عنصر.

تجنّب اختصارات بالية

لا توصي إرشادات web.dev الحالية باستراتيجية جديدة مبنية على isInputPending().

05

انقل الحِساب، لا الواجهة، إلى عامل ويب

Web Worker ينفّذ شيفرة على خيط خلفي منفصل عن خيط التنفيذ الرئيسي. يناسب التحليل المكثّف، تحويل البيانات، فهرسة البحث، وحسابات أخرى لا تحتاج وصولًا مباشرًا إلى الواجهة. أرسل مدخلًا معرفًا، أعد نتيجة معرفَة، وحافظ على العرض وتغييرات الحالة المرئية على الخيط الرئيسي.

لا تناسب Web Workers كل الحالات. فهي لا تستطيع التلاعب مباشرةً بـ DOM أو استخدام Window، وعادةً ما تنسخ الرسائل البيانات. وقد تفوق كلفة إنشاء عامل ونقل البيانات وتنسيق الأخطاء كلفةَ حساب صغير. قِس التفاعل كاملًا، وأنهِ العمال غير الضروريين، وصمّم حالة احتياطية إذا فشل عمل العامل.

اختر عملًا معزولًا

ابدأ بحساب يمكن تسلسل مدخلاته ومخرجاته واختبارها.

رقّم الرسائل بالإصدار

تجاهل النتائج المُنشأة لمرشح أو مسار أو إجراء أقدم.

حافظ على الوصولية

أبلغ عن تقدّم ذي معنى عبر الواجهة الاعتيادية.

06

أدِر JavaScript للجهات الخارجية بوصفه تبعية إنتاجية.

يمكن أن تضيف تحليلات، إعلانات، تجارب، محتوى اجتماعي مُضمّن، مشغلات فيديو، وأدوات الدعم طلبات، تقييم JavaScript، iframes، واعتمادات. قد يكون سكربت البائع ضروريًا، لكنه خارج السيطرة المباشرة لفريق التطبيق ويمكن أن يؤثر على الأداء والخصوصية والأمان والاستمرارية. اجمع غرضه، المسارات، شرط التحميل، الموافِق، متطلبات الموافقة، ومالك الإزالة.

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

قِصّ دائرة التأثير

حمِّل العلامة فقط على المسارات والظروف التي تحتاجها.

راجع مراقبة التغيير

اشمل تغييرات tag-manager في مراجعة الأداء، الخصوصية، الأمان، وإجراءات التراجع.

احتفظ بمفتاح إزالة

وثّق واختبر كيفية تعطيل تكامل غير حرج.

07

اجعل الاستجابة حاجزًا لإصدار الإنتاج

حوّل التتبّع الذي حقق التحسن إلى فحص صغير للتراجع في الرحلة المهمة. حدّد التفاعلات المشمولة، والجهاز أو قيد CPU، والاستجابة المتوقعة، والمراجع. اربطه بمراجعة الحزمة وجرد الطرف الثالث حتى لا تعيد حزمة أو وسم جديد إدخال عمل على الخيط الرئيسي بصمت.

تستخدم Status Is UP هذه الأدلة للتحسين الاستباقي والإصلاح الآمن، لا كبديل عن مراقبة التوافر المباشرة. قبل تغيير عالي المخاطر، جهّز التراجع وتحقق من التدفق الحرج بعد الإصدار. تختلف النتائج باختلاف الجهاز والشبكة والمتصفح والمحتوى وحالة الحساب؛ لذا تعامل مع العتبات بوصفها حواجز أمان لا ضمانات.

اقفل التغييرات الكبيرة

اشترط تتبعات قبل وبعد للملاحة المشتركة، السلة، البحث، أو الحزم الكبيرة.

تدرّب على التراجع

حدّد علامة الميزة أو إعداد الوسم أو إصدار النشر الذي يعيد السلوك المعروف بأنه جيد.

أعد الزيارة بانتظام

أعد القياس بعد الإصدارات الكبرى، تغييرات البائع، أو تغيّر مزيج الأجهزة.

نفّذ / تحقق

دليل المهام العملي الخاص بك.

  1. 01

    اختر تفاعلًا حرجًا

    سمِّ المسار، الإجراء، الاستجابة المتوقعة، وتأثير العميل.

    تحقق: ملاحظة اختبار تسجّل المسار، حالة الحساب، الإجراء، المتصفح، وإعداد الجهاز أو CPU.
  2. 02

    سجِّل خطًا أساسيا

    سجّل التفاعل في DevTools Performance من حالة نظيفة.

    تحقق: يمكن للفريق إعادة زيارة تتبع مع مخطط الشعلات Main flame chart.
  3. 03

    اعثر على العمل المعترض

    افحص المهام الطويلة، مكدسات الاستدعاءات، العرض، ونشاط الطرف الثالث.

    تحقق: لكل تكلفة عليا مدة، مصدر أو أصل، مسار، ومالك.
  4. 04

    أزل السكربتات غير الضرورية

    احذف الحزم غير المستخدمة، التجارب المتقاعدة، المكررات، وكود المسارات غير المطلوب.

    تحقق: النسخة والبُنية والرحلة الحرجة تعمل بعد الإزالة.
  5. 05

    أَجِّل الميزات الاختيارية

    حمِّل القدرة الاختيارية لاحقًا فقط عندما تظل حالتها المؤجلة قابلة للاستخدام.

    تحقق: يغطي اختبار صفحة جديدة التحميل أو الفشل أو الحالة الاحتياطية.
  6. 06

    قسّم المهام الطويلة

    جَمّع العمل وتنازل بعد استجابة الواجهة الفورية.

    تحقق: تتبع جديد يزيل مهمة طويلة مماثلة لمسار التفاعل ويحفظ النتائج الصحيحة.
  7. 07

    قيّم عاملًا (Worker)

    انقل فقط حسابات محددة النطاق برسائل محددة.

    تحقق: اختبر التوقيت من طرف إلى طرف، الأخطاء، النتائج القديمة، والتنظيف.
  8. 08

    راجع الأطراف الثالثة

    سجّل الغرض، المالك، الشرط، الموافقة، التكلفة، وإجراء التعطيل.

    تحقق: لكل علامة على مسار حرِج يوجد قرار بالحفظ أو التقليل أو التأجيل أو الإزالة.
  9. 09

    اختبر في ظروف مقيدة

    كرّر على CPU مُقَيَّد والمتصفحات أو الأجهزة الممثلة حيثما أمكن.

    تحقق: المقارنة تستخدم نفس السيناريو وتُدوّن الاختلافات المادية.
  10. 10

    أصدر مع قدرة التراجع

    أرفق التتبع، فحص القبول، وتعليمات التراجع مع الإصدار.

    تحقق: يستطيع مالك مسمّى استعادة السلوك المعروف الجيد دون بحث غير موثق.
مواضيع النقاش

قارن المقايضات، لا تشارك بيانات خاصة.

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

  1. 01

    أي تفاعل بدا مقبولًا في تقرير التحميل لكن ثبت أنه بطيء عند تتبع نقرة أو ضغطة حقيقية؟

  2. 02

    كيف تقرر ما إن كانت ميزة طرف ثالث تبرّر تكلفة عمل خيط رئيسي المقيسة؟

  3. 03

    أي آلية تراجع تجعل من الأسهل عكس تدهور الأداء دون تعطيل رحلة حاسمة؟

الموارد الشائعة / الموثوقة

اطّلع على المواد المصدرية.

web.devOptimize long tasks ↗

يشرح المهام الطويلة، التنازل، scheduler.yield()، حالات السقوط، وتكاليف التنازل.

تمت المراجعة 2026-09-27
Chrome for DevelopersAnalyze runtime performance ↗

يعرض كيفية التسجيل، تحليل مخطط الشعلات، تحديد المهام الطويلة، والتحقيق في المصدر.

تمت المراجعة 2026-09-27
MDN Web DocsWeb Workers API ↗

يعرف العمال (Workers)، اتصالات الرسائل، وحدود الوصول المباشر إلى DOM.

تمت المراجعة 2026-09-27
web.devLoad Third-Party JavaScript ↗

يوفّر إرشادات جرد وقياس سكربتات الطرف الثالث.

تمت المراجعة 2026-09-27
W3CLong Tasks API ↗

يعرّف المهام الطويلة، العتبة، ونسبة العزو.

تمت المراجعة 2026-09-27

سياسة المصادر. تستخدم هذه المقالة وثائق المتصفح والمعايير ومنصة الويب الرسمية التي قرأها فريق التحرير. تميّز بين القياس والضمانات وتُغفل الادعاءات غير المدعومة.

توضيحات سريعة

أسئلة شائعة.

ما الذي يُعد مهمة JavaScript طويلة؟

يستخدم معيار W3C Long Tasks عتبة 50 ملّي ثانية أو أكثر للإبلاغ. هو إشارة للتحقيق، وليس برهانًا على أن المهام الأقصر آمنة بالكامل. أكّد السبب في تتبع.

هل تقسيم الشيفرة سيحسّن أداء JavaScript دائمًا؟

لا. التقسيم يمكن أن يقلل عمل بدء التشغيل لكنه يضيف تأخير الاستخدام الأول. استخدمه للكود الخاص بالمسارات أو الاختياري، ثم اختبر تلك الميزة تحت ظروف مقيدة.

هل يجب أن تعمل كل دالة مكلفة في Web Worker؟

لا. يناسب العمال الحسابات الثقيلة والمعزولة ذات الرسائل المحددة. لا يمكنهم تغيير DOM مباشرةً، كما يستغرق نقل البيانات وقتًا، وقد تنتهي المهام الصغيرة أسرع على الخيط الرئيسي.

Status Is UP Editorial Team · محررو تمكين وقت التشغيل (Uptime Enablement Editors)

راجعه مراجع أول لأداء الويب (Senior Web Performance Reviewer). نُشر في 2026-09-27؛ وحُدِّث في 2026-09-30.