mirror of
https://github.com/vercel/workflow.git
synced 2026-09-14 19:59:43 +08:00
fd621b1167
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>