perf(ivy): minimise writes to the lView[BINDING_INDEX] / binding root (#32263)

This commit removes all the (duplicated) logic of setting lView[BINDING_INDEX]
from `enterView`. `enterView` is on the critcal path perf-wise so we should
avoid having any logic in there and minimise memory read / write.

This simple refactoring in this PR reduces time spent in noop change detection
by ~12% (from ~800ms down to ~700ms on a local machine where measurements were
taken).

PR Close #32263
This commit is contained in:
Pawel Kozlowski 2019-08-22 11:12:04 +02:00 committed by atscott
parent 860b5d0efa
commit e3422e0aed
2 changed files with 1 additions and 9 deletions

View File

@ -377,10 +377,7 @@ export function refreshView<T>(
try {
resetPreOrderHookFlags(lView);
// Resetting the bindingIndex of the current LView as the next steps may trigger change
// detection.
lView[BINDING_INDEX] = tView.bindingStartIndex;
setBindingRoot(lView[BINDING_INDEX] = tView.bindingStartIndex);
if (templateFn !== null) {
executeTemplate(lView, templateFn, RenderFlags.Update, context);
}
@ -463,7 +460,6 @@ export function refreshView<T>(
} finally {
lView[FLAGS] &= ~(LViewFlags.Dirty | LViewFlags.FirstLViewPass);
lView[BINDING_INDEX] = tView.bindingStartIndex;
leaveView(oldView);
}
}

View File

@ -414,10 +414,6 @@ export function setCurrentQueryIndex(value: number): void {
export function enterView(newView: LView, hostTNode: TElementNode | TViewNode | null): LView {
ngDevMode && assertLViewOrUndefined(newView);
const oldView = lView;
if (newView) {
const tView = newView[TVIEW];
bindingRootIndex = tView.bindingStartIndex;
}
previousOrParentTNode = hostTNode !;
isParent = true;