perf(core): avoid nested looping in execution transformation #7217
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.
We do a lot of
find
andfilter
calls inside theapplyPhasesAndLink
method, and some of them are nested, resulting in a lot of unnecessary lookups.Pretty small refactor here: create a dictionary of stages with the
refId
as the key. Then use that.Also, since
applyPhasesAndLink
is recursive, I'm pulling some logic that only needs to happen once (deduping therequisiteStageRefId
values) out of that method to make sure it only happens once.The impact here is decent? For our biggest application, rendering 10 executions per pipeline, we save about a second of JS execution (2s -> 1s); for 50/pipeline, it's about three seconds (6.5s -> 3.6s). This is dwarfed by the time it takes to download the 50 executions! But probably still worth doing, as I don't think it makes this code any more complex or harder to grok.