perf(compiler): introduce direct rendering

This allows to attach / detach embedded views and projected nodes
in a faster way.
This commit is contained in:
Tobias Bosch
2016-11-02 17:54:05 -07:00
committed by vikerman
parent d708a8859c
commit 9c23884da4
9 changed files with 211 additions and 20 deletions

View File

@ -9,7 +9,7 @@
import {APP_ID, Inject, Injectable, RenderComponentType, Renderer, RootRenderer, ViewEncapsulation} from '@angular/core';
import {isBlank, isPresent, stringify} from '../facade/lang';
import {AnimationKeyframe, AnimationPlayer, AnimationStyles, RenderDebugInfo} from '../private_import_core';
import {AnimationKeyframe, AnimationPlayer, AnimationStyles, DirectRenderer, RenderDebugInfo} from '../private_import_core';
import {AnimationDriver} from './animation_driver';
import {DOCUMENT} from './dom_tokens';
@ -54,11 +54,21 @@ export class DomRootRenderer_ extends DomRootRenderer {
}
}
export const DIRECT_DOM_RENDERER: DirectRenderer = {
remove(node: Text | Comment | Element) { node.remove();},
appendChild(node: Node, parent: Element) { parent.appendChild(node);},
insertBefore(node: Node, refNode: Node) { refNode.parentElement.insertBefore(node, refNode);},
nextSibling(node: Node) { return node.nextSibling;},
parentElement(node: Node): Element{return node.parentElement;}
};
export class DomRenderer implements Renderer {
private _contentAttr: string;
private _hostAttr: string;
private _styles: string[];
directRenderer: DirectRenderer = DIRECT_DOM_RENDERER;
constructor(
private _rootRenderer: DomRootRenderer, private componentProto: RenderComponentType,
private _animationDriver: AnimationDriver, styleShimId: string) {

View File

@ -10,6 +10,7 @@ import {__core_private__ as r} from '@angular/core';
export type RenderDebugInfo = typeof r._RenderDebugInfo;
export var RenderDebugInfo: typeof r.RenderDebugInfo = r.RenderDebugInfo;
export type DirectRenderer = typeof r._DirectRenderer;
export var ReflectionCapabilities: typeof r.ReflectionCapabilities = r.ReflectionCapabilities;