Skip to content
Permalink
Browse files

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
  • Loading branch information...
pkozlowski-opensource authored and atscott committed Aug 22, 2019
1 parent 860b5d0 commit e3422e0aed57f5c7790db155f4efdb2acb9d4182
Showing with 1 addition and 9 deletions.
  1. +1 −5 packages/core/src/render3/instructions/shared.ts
  2. +0 −4 packages/core/src/render3/state.ts
@@ -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);
}
}
@@ -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;

0 comments on commit e3422e0

Please sign in to comment.
You can’t perform that action at this time.