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.
