typescript - Finns det något alternativ för att kompilera och köra en ts-kod snabbare med tsc eller ts-node eller något annat?


För närvarande har vi en klient-serverapplikation (för tävlingsprogrammeringssyften) där klienten trycker på kompilerings- och körknappen och skickar TS-kod till servern där TS-koden lagras i en fil och körs lokalt med testfall på servern och utdata returneras till klienten med testfallens godkända/underkända resultat. Men att köra TS-filen är väldigt långsamt och detta tar mycket tid.

Jag använder ts-node i transpileonly-läge för att kompilera och köra filen lokalt på servern.

t.ex. npx ts-node -T tsFilnamn.ts

Vårt krav är kopplat till kompilering och körtid för TS-kod.

Svar #1

Jag la till dessa miljövariabler och starttiden gick från sekunder till, förmodligen millisekunder:

TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true ts-node ./script.ts

Överväg att installera ts-node via [sudo] npm install -g typescript ts-node, då undviker du de extra steg som npx tar för att säkerställa att ts-node är installerat varje gång.

Redigera: Jag har sedan bytt till Sucrase via [sudo] npm install -g sucrase. Jag ersätter bara varje ts-node-förekomst med sucrase-node för att få ungefär en 20 gånger snabbare hastighet i mina tester. Det behöver inga miljövariabler. Det gör ingen typkontroll, det säkerställer bara att du har snabba utvecklingsiterationer. Sedan kan du köra fullständiga tsc-byggnader med typkontroll i din editor och i CI. För mitt användningsfall är det perfekt, men din situation kan vara annorlunda. Jag kunde också snabba upp mina Jest-tester med @sucrase/jest-plugin.

sucrase-node ./script.ts

Svar #2

TS-Node Officiella Rekommendationer

De officiella TS-Node-dokumenten beskriver flera prestandarekommendationer, några av vilka andra har kommenterat.

https://typestrong.org/ts-node/docs/performance/

Jag är dock förvånad över att ingen har nämnt SWC-integrationen! Från dokumentationen:

Använd vår swc-integration. Detta är utan tvekan det snabbaste alternativet

Snabb webbkompilator (SWC)

SWC, eller Speedy Web Compiler, är en transpiler för JavaScript/TypeScript som är helt skriven i Rust. Som sådan är den mycket snabbare än något du kommer att få från alternativ som tsc eller babel.

Enligt SWC:s webbplats (https://swc.rs/):

SWC är 20 gånger snabbare än Babel på en enskild tråd och 70 gånger snabbare på fyra kärnor.

Ställ in med TS-Node

Lägg till SWC-kärnbiblioteket i ditt projekt:

npm i -D @swc/core

Och lägg till följande i din tsconfig.json:

{
  "ts-node": {
    "swc": true
  }
}

Och du är redo att köra! Njut av blixtsnabb transpiling.

Relaterade artiklar