[6.x] Memoize resolved field conditions - #15262
Merged
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 insidepassesNonRevealerConditions()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
passOnAnyandshowOnPass. 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.