Optimierung der Leistung von TypeScript-Anwendungen: in der Praxis

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum kann TypeScript langsam sein?

TypeScript ist ein leistungsstarkes Werkzeug, das JavaScript um statische Typisierung erweitert. Allerdings stellen Entwickler oft fest, dass TypeScript-Anwendungen "von Haus aus" langsamer laufen als reines JS. Die Hauptgründe sind übermäßige Transpilierung, falsche Compiler-Konfiguration und ineffiziente Codemuster. In diesem Artikel behandeln wir praktische Optimierungsmethoden, die sowohl den Build-Prozess als auch die Laufzeit Ihrer Anwendung beschleunigen.



1. Profiling und Identifikation von Engpässen

Bevor Sie etwas optimieren, müssen Sie verstehen, was genau die Leistung beeinträchtigt. Nutzen Sie die integrierten Tools des Browsers und von Node.js.



1.1. Chrome DevTools Performance

Zeichnen Sie ein Ausführungsprofil Ihrer Anwendung auf. Achten Sie auf lange Aufgaben (Long Tasks) und häufige Aufrufe des Garbage Collectors (GC). TypeScript-Code ist nach der Kompilierung normales JavaScript, daher funktionieren alle Standard-Profiling-Methoden.



1.2. Analyse der Build-Zeit (tsc --generateTrace)

Wenn die Kompilierung selbst langsam ist, verwenden Sie das Flag --generateTrace:

tsc --generateTrace trace_output

Öffnen Sie dann die Datei trace_output/trace.json in Chrome unter chrome://tracing. Sie sehen, welche Dateien am längsten kompilieren. Oft sind dies große Bibliotheken oder Dateien mit übermäßigen Importen.



2. Konfiguration der tsconfig.json für maximale Geschwindigkeit

Eine falsche Konfiguration ist der Hauptfeind der Leistung. Betrachten wir die wichtigsten Optionen.



2.1. strict: true – nicht übereilen

Der Modus strict aktiviert alle strengen Typprüfungen. Dies verlangsamt die Kompilierung. Verwenden Sie für Produktions-Builds:

{  "compilerOptions": {    "strict": false,    "noImplicitAny": true,    "strictNullChecks": true  }}

Diese beiden Optionen decken 90% der Fehler ab, arbeiten aber schneller als das vollständige strict.



2.2. Optionen zur Beschleunigung des Builds

  • incremental: true – aktiviert die inkrementelle Kompilierung. TypeScript speichert Informationen über den vorherigen Build und kompiliert nur geänderte Dateien neu.
  • skipLibCheck: true – deaktiviert die Typprüfung in Deklarationsdateien (.d.ts). Dies bringt einen deutlichen Geschwindigkeitsvorteil, insbesondere bei vielen Drittanbieter-Bibliotheken.
  • isolatedModules: true – ermöglicht die Verwendung schnellerer Transpiler (z. B. esbuild) anstelle von tsc.

Beispiel einer optimierten Konfiguration für die Entwicklung:

{  "compilerOptions": {    "target": "ES2020",    "module": "ESNext",    "moduleResolution": "node",    "incremental": true,    "skipLibCheck": true,    "strict": false,    "noImplicitAny": true,    "strictNullChecks": true,    "outDir": "./dist"  },  "include": ["src/**/*"],  "exclude": ["node_modules", "**/*.test.ts"]}


3. Laufzeitoptimierung: Typen und Datenstrukturen

TypeScript-Typen verschwinden nach der Kompilierung, aber ihr "Abdruck" bleibt in Form des vom Compiler generierten Codes erhalten.



3.1. Vermeiden Sie komplexe bedingte Typen zur Laufzeit

Komplexe conditional types können viel Code generieren. Verwenden Sie stattdessen einfache Union-Typen:

// Schlecht: komplexer bedingter Typtype ResponseType<T> = T extends string ? { data: string } : { data: number };function handleResponse<T>(value: T): ResponseType<T> { ... }

// Gut: einfacher Union-Typtype ResponseType = { data: string } | { data: number };function handleResponse(value: string | number): ResponseType { ... }


3.2. Verwenden Sie as const für Konstanten

Dies hilft TypeScript, genauere Typen abzuleiten, was die Anzahl der Prüfungen reduziert:

const COLORS = ['red', 'green',                

Blogs

Buchempfehlungen