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. Его можно загрузить на вкладке производительности, чтобы увидеть, какие типы требуют больше всего ресурсов.

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 включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Профилирование медленной компиляции TypeScript
  2. Избегание затратных операций над типами
  3. skipLibCheck и изолированные объявления
  4. Проверка типов в CI: стратегии и инструменты
← Назад к TypeScript Academy