느린 TypeScript 컴파일 프로파일링
--extendedDiagnostics와 --generateTrace로 병목을 찾습니다.
느린 TypeScript 컴파일 프로파일링은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 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파일 포함 줄이기
tsconfig에서 include와 exclude를 사용하여 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로 검사하기
개발 중에는 transpileOnly: true와 함께 ts-jest 또는 esbuild를 사용하여 타입 검사를 건너뛰고 반복 작업을 빠르게 진행하십시오. 전체 타입 검사는 CI에서 별도로 실행하십시오.
// jest.config.js with ts-jest
{
transform: {
"^.+\.tsx?$": ["ts-jest", { diagnostics: false }]
}
}편집기 성능
VS Code에서 TypeScript 언어 서버가 느려지는 현상은 대개 같은 처리 비용이 큰 타입으로 거슬러 올라갑니다. TypeScript: Restart TS Server를 확인하고 언어 서버의 TS 추적 정보를 살펴보십시오.
// VS Code settings.json to enable detailed TS server log:
// "typescript.tsserver.log": "verbose"컴파일 성능 분석 요약
상위 수준의 시간 측정에는 --extendedDiagnostics를, 타입별 분석에는 --generateTrace를 사용하고, 파일 포함 범위와 깊은 조건부 타입, 큰 유니온 분배를 줄여 컴파일 속도를 높이십시오.
빠른 확인
Chrome DevTools와 호환되는 추적 파일을 생성하는 플래그는 무엇입니까?
배운 내용
--extendedDiagnostics와 --generateTrace로 TypeScript 컴파일을 프로파일링하십시오. 파일 포함 범위를 제한하고, skipLibCheck를 사용하며, 중간 타입을 캐시하고, 지나치게 재귀적이거나 분배적인 타입 연산을 피하여 컴파일 시간을 줄이십시오.
자주 묻는 질문
“느린 TypeScript 컴파일 프로파일링” 강의는 무료인가요?
네 — “느린 TypeScript 컴파일 프로파일링” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“느린 TypeScript 컴파일 프로파일링”에서 뭘 배우나요?
--extendedDiagnostics와 --generateTrace로 병목을 찾습니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“느린 TypeScript 컴파일 프로파일링” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 느린 TypeScript 컴파일 프로파일링
- 비용이 큰 형식 연산 피하기
- skipLibCheck 및 격리된 선언
- CI에서 형식 검사하기: 전략과 도구