refactor(core): have different data types for each node. (#14120)
Also have a new node type for queries. This leads to less memory usage and better performance. Deep Tree Benchmark results (depth 11): - createAndDestroy (view engine vs current codegen): * pureScriptTime: 78.80+-4% vs 72.34+-4% * scriptTime: 78.80+-4% vs 90.71+-9% * gc: 5371.66+-108% vs 9717.53+-174% * i.e. faster when gc is also considered and about 2x less memory usage! - update unchanged Part of #14013 PR Close #14120
This commit is contained in:

committed by
Miško Hevery

parent
7ad616a177
commit
f802194c18
@ -12,7 +12,7 @@ import {looseIdentical} from '../facade/lang';
|
||||
import {ExpressionChangedAfterItHasBeenCheckedError} from '../linker/errors';
|
||||
import {Renderer} from '../render/api';
|
||||
|
||||
import {NodeData, NodeDef, NodeFlags, NodeType, ViewData, ViewDefinition} from './types';
|
||||
import {ElementData, NodeData, NodeDef, NodeFlags, NodeType, ViewData, ViewDefinition, asElementData, asTextData} from './types';
|
||||
|
||||
export function setBindingDebugInfo(
|
||||
renderer: Renderer, renderNode: any, propName: string, value: any) {
|
||||
@ -61,10 +61,19 @@ export function checkAndUpdateBindingWithChange(
|
||||
return null;
|
||||
}
|
||||
|
||||
export function declaredViewContainer(view: ViewData) {
|
||||
export function declaredViewContainer(view: ViewData): ElementData {
|
||||
if (view.parent) {
|
||||
const parentView = view.parent;
|
||||
return parentView.nodes[view.parentIndex];
|
||||
return asElementData(parentView, view.parentIndex);
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export function renderNode(view: ViewData, def: NodeDef): any {
|
||||
switch (def.type) {
|
||||
case NodeType.Element:
|
||||
return asElementData(view, def.index).renderElement;
|
||||
case NodeType.Text:
|
||||
return asTextData(view, def.index).renderText;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user