0Pricing
TypeScript Academy · درس

تحليل أداء تجميع TypeScript البطيء

استخدموا --extendedDiagnostics و--generateTrace للعثور على الاختناقات

تحليل أداء تجميع TypeScript البطيء درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

لماذا قد يكون TypeScript بطيئًا؟

قد تتسبب الأنواع الشرطية المعقدة، وتوزيعات الاتحادات الكبيرة، والأنواع المعينة العودية بعمق في إبطاء مدقق أنواع TypeScript بدرجة كبيرة في المشاريع الكبيرة.

// Expensive: distributive conditional on large union
type Slow = LargeUnion extends infer T ? T extends string ? T : never : never;

خيار --extendedDiagnostics

شغّل tsc --extendedDiagnostics لعرض تفصيل لوقت الترجمة: مراحل التحليل والربط وفحص الأنواع والإخراج.

tsc --extendedDiagnostics 2>&1 | head -40
# Output:
# Files:             212
# Lines:            48320
# Check time:       8.23s  ← focus here

خيار --generateTrace

ينشئ tsc --generateTrace ./trace ملف تتبع متوافقًا مع Chrome DevTools، ويمكنك تحميله في علامة تبويب Performance لمعرفة الأنواع المكلفة حسابيًا.

tsc --generateTrace ./trace-output
# Open trace-output/trace.json in Chrome DevTools > Performance

تحليل التتبع

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

# Common culprits in traces:
# - Recursive mapped types with large inputs
# - Distributive conditionals over 50+ member unions
# - Deep infer chains on complex generics

خيار --listFiles

يعرض tsc --listFiles كل ملف مشمول في الترجمة. وتُعد مجلدات node_modules الكبيرة المشمولة عن طريق الخطأ سببًا شائعًا لمشكلات الأداء.

tsc --listFiles 2>&1 | grep node_modules | wc -l
# If this is large, check your include/exclude settings

تقليل تضمين الملفات

استخدم include وexclude في tsconfig لتحديد الملفات التي يعالجها TypeScript.

{
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist", "**/*.test.ts"]
}

skipLibCheck لتحقيق تحسينات سريعة

يتجاوز skipLibCheck: true فحص الأنواع في جميع ملفات إعلانات .d.ts، مما قد يسرّع الترجمة بدرجة كبيرة في المشاريع التي تحتوي على تبعيات كثيرة.

{
  "compilerOptions": {
    "skipLibCheck": true
  }
}

عزل الأنواع المكلفة

استخرج حسابات الأنواع المكلفة إلى أنواع وسيطة مسماة حتى يتمكن TypeScript من تخزينها مؤقتًا بدلًا من إعادة حسابها عند كل موضع استخدام.

// Slow: recomputed at each usage
type Result = ComplexUnion extends string ? ComplexUnion : never;

// Fast: cached
type FilteredUnion = ComplexUnion extends string ? ComplexUnion : never;
type Result = FilteredUnion;

الفحص باستخدام transpileOnly

أثناء التطوير، استخدم ts-jest أو esbuild مع transpileOnly: true لتجاوز فحص الأنواع وتسريع التكرار. شغّل فحوص الأنواع الكاملة بشكل منفصل في CI.

// jest.config.js with ts-jest
{
  transform: {
    "^.+\.tsx?$": ["ts-jest", { diagnostics: false }]
  }
}

أداء المحرر

غالبًا ما تعود حالات تباطؤ خادم لغة TypeScript في VS Code إلى الأنواع المكلفة نفسها. تحقّق من TypeScript: Restart TS Server ومن تتبّع TS الصادر عن خادم اللغة.

// VS Code settings.json to enable detailed TS server log:
// "typescript.tsserver.log": "verbose"

مراجعة: تحليل أداء الترجمة

استخدم --extendedDiagnostics للحصول على توقيتات عامة، و--generateTrace لتحليل كل نوع، وقلّل تضمين الملفات والشرطيات العميقة وتوزيعات الاتحادات الكبيرة لتسريع الترجمة.

تحقّق سريع

ما الخيار الذي ينشئ ملف تتبّع متوافقًا مع Chrome DevTools؟

ما تعلّمتموه

حلّلوا أداء ترجمة TypeScript باستخدام --extendedDiagnostics و--generateTrace. قلّلوا وقت الترجمة من خلال الحد من تضمين الملفات، واستخدام skipLibCheck، وتخزين الأنواع الوسيطة مؤقتًا، وتجنّب عمليات الأنواع العميقة العودية أو التوزيعية.

الأسئلة الشائعة

هل درس «تحليل أداء تجميع TypeScript البطيء» مجاني؟

نعم — نص درس «تحليل أداء تجميع TypeScript البطيء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «تحليل أداء تجميع TypeScript البطيء»؟

استخدموا --extendedDiagnostics و--generateTrace للعثور على الاختناقات تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟

لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «تحليل أداء تجميع TypeScript البطيء»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟

نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تحليل أداء تجميع TypeScript البطيء
  2. تجنّب عمليات الأنواع المكلفة
  3. ‏skipLibCheck والتصريحات المعزولة
  4. التحقق من الأنواع في CI: الاستراتيجيات والأدوات
← العودة إلى TypeScript Academy