Technologia

TypeScript 7.0 kompiluje 10 razy szybciej — Vue, Svelte i Angular muszą poczekać

Adrian Kessler

Kompilator TypeScripta w VS Code spędzał kiedyś 125 sekund na sprawdzaniu świeżej kopii własnego kodu edytora. TypeScript 7.0 wykonuje to samo zadanie w 10,6 sekundy. Microsoft nie optymalizował starego kodu – przeniósł całe środowisko uruchomieniowe kompilatora z JavaScriptu do Go, odblokowując równoległość wielordzeniową, której silnik JavaScript nie jest w stanie zapewnić.

To nie jest przepisanie od zera. Inżynierowie Microsoftu opisali logikę sprawdzania typów jako strukturalnie identyczną z TypeScriptem 6.0 – te same reguły, to samo zachowanie, przetłumaczone na język, który potrafi rozłożyć pracę na rdzenie CPU. Zespół wybrał Go, ponieważ oryginalna baza kodu w JavaScripcie, bogata w funkcje, niemal jeden do jednego odwzorowywała się w idiomy Go. Nowe środowisko uruchomieniowe wprowadza również flagi do jawnej kontroli równoległości: użycie –checkers 8 na nowoczesnej stacji roboczej daje poprawę 16,7 razy w stosunku do TypeScripta 6 przy budowaniu VS Code. Sprawdzanie typów w CI Slacka spadło z 7,5 minuty do 1,25. Budowanie Bluesky poszło z 24,3 sekund do 2,8. Ten wzorzec powtarza się w różnych bazach kodu: zyski rosną wraz ze wzrostem rozmiaru projektu, ponieważ ograniczeniem jest teraz sprzęt, a nie środowisko uruchomieniowe.

TypeScript 7.0 jest dostarczany bez publicznego API programistycznego – interfejsu, którego narzędzia budowania używają, gdy wywołują kompilator z własnego kodu. Każdy główny framework webowy opiera się na nim przy sprawdzaniu typów szablonów. Narzędzia Volar we Vue, serwis językowy Svelte, MDX, sprawdzacz szablonów Angulara – żadne z nich nie działa z TypeScriptem 7.0. Narzędzia takie jak ts-morph i ts-jest, które udostępniają wewnętrzne mechanizmy kompilatora TypeScripta do refaktoryzacji i testowania, również są wyłączone z działania. Microsoft potwierdził, że zastępcze API jest planowane na TypeScript 7.1, spodziewany w październiku. Projekty używające któregokolwiek z tych frameworków lub narzędzi nie powinny jeszcze aktualizować.

Starsze konfiguracje projektów napotykają odrębny zestaw twardych przeszkód. TypeScript 7.0 zamienia opcje, które wersja 6.0 oznaczyła jako przestarzałe, w twarde błędy budowania: cele kompilacji ES5, formaty modułów AMD i SystemJS, klasyczne rozwiązywanie modułów oraz słowo kluczowe assert w instrukcjach importu – wszystko to powoduje natychmiastowe niepowodzenie budowania. Nowy domyślny plik tsconfig.json nie ładuje już automatycznie pakietów @types, co oznacza, że projekty polegające na automatycznym wykrywaniu typów bez jawnego deklarowania zależności typów będą cicho zawodzić w momencie importowania. Microsoft udostępnia shim kompatybilnościowy typescript@npm:@typescript/typescript6 dla projektów, które muszą utrzymywać narzędzia TS6 obok nowego kompilatora.

Projekty, które pokonają te przeszkody – zwykłe aplikacje Node.js lub Deno, aplikacje przeglądarkowe niezbudowane na systemie szablonów frameworka oraz biblioteki bez zależności od API programistycznego – mogą zaktualizować, zmieniając pojedynczy wpis w package.json. Wsparcie w edytorze podąża za tym samym podziałem: VS Code ma dostępne teraz dedykowane rozszerzenie TypeScript 7, a wbudowane wsparcie przechodzi na protokół Language Server Protocol, zastępując starszy projekt TSServer. WebStorm i inne edytory, które również polegały na TSServer, wciąż pracują nad tą migracją.

TypeScript 7.1, docelowo zaplanowany na październik 2026, dostarczy nowe API kompilatora, którego potrzebują narzędzia Vue, Svelte, Angulara i MDX, aby mogły migrować. Kiedy się pojawi, zyski wydajnościowe z 15-miesięcznego portowania do Go dotrą do całego ekosystemu. Do tego czasu strony projektów Volara, SvelteKita i Angulara zalecają pozostanie przy TypeScripcie 6.0.x.

Tagi: , , ,

Dyskusja

Jest 0 komentarzy.