Files
Peter Wielander fd621b1167 perf(core): ship build-time V8 code cache for workflow bundles
On a cold serverless instance the first replay parses the entire workflow
bundle before it can reach the first step. The in-process vm.Script cache
(#2471) only helps subsequent replays in the same process; the cold first
one still pays a full parse, which grows ~30ms/MB and dominates
time-to-first-step for large bundles.

Producer (builders/next): for bundles over a size threshold, compile the
bundle at build time and emit Script.createCachedData() as base64 in the
generated flow route, passed via workflowEntrypoint's cachedData option.
Skipped for small bundles (parse is ~1ms; the blob would just bloat the
artifact) and via WORKFLOW_DISABLE_BUNDLE_CODE_CACHE.

Consumer (core): getCachedWorkflowScript compiles with the cachedData so
V8 skips parsing on the first compile. The blob is filename-independent so
one build-time cache serves every per-workflow filename; V8 validates it
and falls back to a full parse on any version/source mismatch, so a stale
blob is never a correctness risk.

Measured fresh-process parse: 2MB 34->4.8ms, 8MB 147->21ms (~7x).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 14:28:01 -07:00
..
2026-06-15 13:46:00 -07:00
2026-06-17 17:20:44 -07:00
2026-06-17 17:20:44 -07:00
2026-06-15 13:46:00 -07:00
2026-06-17 17:20:44 -07:00
2026-06-17 17:20:44 -07:00
2026-06-17 17:20:44 -07:00
2026-06-17 17:20:44 -07:00
2026-05-28 11:19:23 -07:00
2026-06-17 17:20:44 -07:00
2026-06-15 13:46:00 -07:00
2026-06-17 17:20:44 -07:00
2026-06-17 17:20:44 -07:00
2026-06-17 17:20:44 -07:00
2026-06-17 17:20:44 -07:00