A build loads the program twice per island round, each load a cold tsc-ts server

Aperta
#2,810 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
12/100
Tipo di issue
Refactoring
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
typescript

Direzione di ricerca

Start in packages/compiler/src/index.ts (around line 492), where each createFrontend builds its own FrontendServices, and in frontend/services.ts (createProgramHost, reuseProgramHosts). Then read executable/prepare.ts, where the island scan and island package frontends are created and disposed (around lines 84 and 103) and the retry recurses (around lines 190 and 220). Run the build with SCRIPTC_TIMING=1 to see the frontend-load counts. Done means one FrontendServices per frontend-process, so the reload and retry rounds reuse warm hosts. This is design-heavy and overlaps with the graph-islands work in #2807, so coordinate with maintainers first.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

A build starts a fresh tsc-ts server for every frontend load and loads the program twice per island round

Measurements

scriptc build packages/coding-agent/src/cli.ts --node-islands=auto --npm-static <14 packages> (pi), SCRIPTC_TIMING=1, 8 vCPU Sandbox, cold cache, on main + #2807 (bc19267d9 + the coverage fix; builds are unaffected by it):

phase round 1 round 2 round 3
frontend-load 159.0 s 169.4 s 159.2 s
frontend-island-reload 100.7 s 105.2 s 62.4 s
lower 26.4 s 20.6 s — (build failed after the reload)
  • The whole build is one frontend-process: 803.4 s, total build time=804.14s, peak RSS 2.8 GB, rc=1 (96 diagnostics).
  • Loading is 756 s of the 803 s (94%); lowering is 47 s.
  • A per-3 s process sample counted 83 distinct tsc-ts processes during the build (median life 18 s: 35 lived ≤6 s, 26 7–21 s, 9 22–60 s, 13 >60 s), at most 3 at once.

Why

Every createFrontend call builds its own FrontendServices (packages/compiler/src/index.ts:492), which owns the program hosts and their tsc-ts connections (frontend/services.ts, createProgramHost). #2650's reuse (reuseProgramHosts(PROGRAM_HOST_LOADS)) lets a host serve up to 4 loads inside one FrontendServices, so it never spans the loads that matter:

  • executable/prepare.ts:84 creates a frontend with islandScan, prepare.ts:103 disposes it and creates a second one with islandPackages — the same round loads the program twice, on two cold servers, each re-typechecking the whole program and its libraries.
  • The island retry recurses into prepareExecutableModule (prepare.ts:190, :220) with the grown set, which starts the pair over: another two cold loads, another two servers.
  • The remaining short-lived servers are helpers rooted at the entry's directory (--cwd …/packages/coding-agent/src; 7 distinct in a 167 s window against 14 rooted at the project), one fresh process each.

The same shape cost the coverage analysis a second full lowering on pi; #2807 removes that one by deciding graph-proven islands before the first lowering (node-islands/graph-islands.ts).

Directions

  • Share one FrontendServices per build (i.e. per frontend-process) instead of one per createFrontend, so the island reload and the retry rounds rebind idle hosts instead of starting cold servers.
  • Decide the graph-proven islands before the first load, as #2771 does for builds, so most rounds disappear rather than becoming cheaper.
Lingua principale
TypeScript
Stelle
6.4k
Fork
204
Merge medio
9h 48m
PR unite (30g)
795

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di vercel-labs/scriptc

Tutte le issue di vercel-labs/scriptc

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.