Skip to content

[6.x] Memoize resolved field conditions - #15262

Merged
jasonvarga merged 1 commit into
6.xfrom
cp-conditions-perf
Aug 25, 2026
Merged

[6.x] Memoize resolved field conditions#15262
jasonvarga merged 1 commit into
6.xfrom
cp-conditions-perf

Conversation

@jasonvarga

@jasonvarga jasonvarga commented Aug 25, 2026

Copy link
Copy Markdown
Member

Field conditions get re-evaluated constantly while a publish form is open, and getConditions() redoes the same work every time. It gets called repeatedly for a single field — twice inside passesNonRevealerConditions() alone — and re-runs the blueprint conversion on each call. It's now resolved once per validator.

It isn't a pure getter, though: it also sets passOnAny and showOnPass. The memoized path replays those, and like the uncached path it only ever sets them rather than putting them back to their defaults, so a repeat call leaves the validator in exactly the state it would have been in before.

Also hoists two regexes that were being rebuilt on every call.

Extracted from #15158.

getConditions() gets called repeatedly for a single field - twice inside
passesNonRevealerConditions() alone - and re-runs the blueprint conversion
every time. Resolve it once per validator instead.

It isn't a pure getter, though. It also sets passOnAny and showOnPass, so the
memoized path has to replay those, and like the uncached path it only ever sets
them rather than putting them back to their defaults.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jasonvarga
jasonvarga merged commit 45e8935 into 6.x Aug 25, 2026
66 checks passed
@jasonvarga
jasonvarga deleted the cp-conditions-perf branch August 25, 2026 01:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant