Skip to content

A cached vp run spends seconds compiling the same cache globs while building the task graph #886

Closed

Description

@jasonkuhrt

Written by an AI agent (Claude) on behalf of @jasonkuhrt.

In a workspace of 138 packages and 1,576 tasks, vp run @libs/enum#test with both of its tasks cached spends about 2 s of CPU after the configs load and before the first task starts, building the task graph.

Cause. resolve_glob_to_workspace_relative calls wax::Glob::new for every input and output pattern of every task. In wax 0.7, Glob::new compiles a regular expression and partition compiles another, and only the partition's prefix and text are kept. The workspace has 13,708 pattern uses but only 1,011 distinct patterns: packages repeat the same src/** and the same negations.

Measured (Vite+ 1.4.0 built against vite-task a3c087a, optimized binding, macOS, 3 interleaved runs per variant, load average about 7):

before parse each distinct pattern once
whole run, CPU 4.45 s 2.47 s
whole run, wall 3.75 s 1.79 s
after configs load, CPU 2.06 s 0.10 s

A second, separate idea. Configs load one package after another (lib.rs). A prototype that let up to 8 loads overlap, keeping results in order, returned the same 138 configs as the serial load and took the same run from 2.47 s to 2.19 s CPU (1.79 s to 1.62 s wall) on top of the glob change. A config whose result depends on load order would be the risk, so it is left out of the fix.

Activity

  1. jasonkuhrt commented on Oct 28, 2026

    @jasonkuhrt
    ContributorAuthor

    Fixed by #887 and #890.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions