3.11.20223 min

Maciej OlanickiRedakcja Bulldogjob

TypeScript po przebudowie, dużo mniejszy i szybszy

Udało się uzyskać nawet dwucyfrowe wzrosty wydajności, a jednocześnie znacząco odchudzić TypeScripta.

TypeScript po przebudowie, dużo mniejszy i szybszy

Dobre wieści dla użytkowników i entuzjastów języka TypeScript, a także zachęta dla wszystkich, którzy pragną go poznać. Microsoft ogłosił właśnie, że baza kodu TypeScripta doczekała się solidnej przebudowy przekładającej się na wymierne korzyści dla developerów. Dzięki modularyzacji kodu udało się uzyskać znaczące przyśpieszenie i optymalizacje.


Moduły zamiast przestrzeni

Zanim przejdziemy do wyników prac Microsoftu, a te są imponujące, warto wyjaśnić, jak dokonano optymalizacji TypeScripta. A jest to ciekawe, gdyż praca polegająca na modularyzacji kodu przebiegła była w dużej mierze zautomatyzowana z użyciem typeformera – zestawu narzędzi pozwalającego właśnie na automatyczną konwersję repozytoriów TS do modułów. 

typeformer w pierwszej kolejności utworzył coś, co sam patron całego przedsięwzięcia, Jake Bailey, który jest także autorem samego typeformera, nazywa modułami-beczkami. W beczkach odtworzone zostały wszystkie pliki z korespondujących z nimi starymi przestrzeniami nazw. Zamiast posługiwania się globalną przestrzenią nazw, symbole są teraz ładowane do każdego pliku, a to z kolei pozwala już przekształcić w Type Script w CommonJS. 

Oczywiście nie obyło się bez problemów – dotąd w TypeScripcie przestrzenie nazw były obiektami, a ładowanie plików CommonJS jest bardziej obciążające niż ładowanie zwykłych obiektów. Ale i temu zaradził Bailey – dzięki zastosowaniu skoncentrowanego na wydajności bundlera esbuild udało się wyprodukować działający output dla całej bazy kodu TypeScripta.

Jednak tym, czego nie spodziewał się Jake Bailey, a przynajmniej nie w takim stopniu, to naprawdę znaczące optymalizacje w działaniu TypeScripta.


TypeScript przyśpiesza i chudnie

Przede wszystkim sam tsc.js startuje odtąd 30% szybciej niż dotychczas, podobnie jak import typescript.js, stanowiącego publiczne API, przyśpieszył o 10%. Złożyły się na to dwie inne optymizacje: skrócenie czasu kompilacji oraz zmniejszenie wielkości paczki npm.

Dzięki modularyzacji bazy kodu TypeScripta udało się uzyskać wzrosty wydajności od 10 do 25%. Wpływ na to miał przede wszystkim zmiana polegająca na przeniesieniu wspomnianych już elementów wywoływanych dotąd z globalnej przestrzeni do plików – lokalnie można je wywoływać szybciej, bezpośrednio, bez konieczności generowania dodatkowych obciążeń.

Ponadto aż o 43% zmniejszono paczkę npm TypeScripta. Schudła ona z 63,6 MB do 35,6 MB! Dzięki modularyzacji udało się bowiem pozbyć m.in. pliku typescriptServices.js, który stanowił dotąd redundancję dla typescript.js. Usunięto także protold.d.ts. Z innymi zmianami, które przełożyła się na optymalizację TypeScripta można zapoznać w oficjalnym repozytorium.


Znaczenie dla przyszłości TypeScripta 

Takie zmiany siłą rzeczy pociągają za sobą pytanie: w jaki sposób modularyzacja będzie wpływać na dalsze losy TypeScripta i jego rozwój? Według samego Baileya konwersja bazy kodu na moduły otwiera drzwi na liczne usprawnienia samego TypeScripta, jak i budowanego z jego użyciem aplikacji. 

Przyznaje on, że wykorzystywane moduły-beczki nie są optymalnym rozwiązaniem i mechanizm wymaga poprawek, to jednak otwiera możliwość dodawania do repo nowych blików bezkosztowo lub z niewielkim kosztem. Poskutkuje to usprawnieniem tree-shakingu, czyli realizowanego przez bundlery procesu odfiltrowywania i pozbywania się z kodu zbędnych elementów. To zaś przełoży się na redukcję wielkości i przyśpieszenie aplikacji napisanych z użyciem TypeScripta. 

<p>Loading...</p>