Профилирование медленной компиляции 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 — локальная установка не требуется.
Все уроки этого курса
- Профилирование медленной компиляции TypeScript
- Избегание затратных операций над типами
- skipLibCheck и изолированные объявления
- Проверка типов в CI: стратегии и инструменты