perf(ivy): remove renderStringify calls for text nodes creation (#32342)

Values passed to the `ɵɵtext` instruction are strings (or undefined)
in the generated code so no need to stringify those again.

PR Close #32342
This commit is contained in:
Pawel Kozlowski 2019-08-27 15:16:50 +02:00 committed by Miško Hevery
parent fac066ea9f
commit a1e91b00d2
3 changed files with 10 additions and 13 deletions

View File

@ -5,15 +5,13 @@
* Use of this source code is governed by an MIT-style license that can be * Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license * found in the LICENSE file at https://angular.io/license
*/ */
import {assertDataInRange, assertDefined, assertEqual} from '../../util/assert'; import {assertDataInRange, assertEqual} from '../../util/assert';
import {TNodeType} from '../interfaces/node'; import {TNodeType} from '../interfaces/node';
import {RText, isProceduralRenderer} from '../interfaces/renderer'; import {BINDING_INDEX, HEADER_OFFSET, RENDERER, TVIEW, T_HOST} from '../interfaces/view';
import {BINDING_INDEX, HEADER_OFFSET, LView, RENDERER, TVIEW, T_HOST} from '../interfaces/view';
import {appendChild, createTextNode} from '../node_manipulation'; import {appendChild, createTextNode} from '../node_manipulation';
import {getLView, getSelectedIndex, setIsNotParent} from '../state'; import {getLView, getSelectedIndex, setIsNotParent} from '../state';
import {NO_CHANGE} from '../tokens'; import {NO_CHANGE} from '../tokens';
import {renderStringify} from '../util/misc_utils'; import {renderStringify} from '../util/misc_utils';
import {getNativeByIndex} from '../util/view_utils';
import {bind} from './property'; import {bind} from './property';
import {getOrCreateTNode, textBindingInternal} from './shared'; import {getOrCreateTNode, textBindingInternal} from './shared';
@ -24,19 +22,17 @@ import {getOrCreateTNode, textBindingInternal} from './shared';
* Create static text node * Create static text node
* *
* @param index Index of the node in the data array * @param index Index of the node in the data array
* @param value Value to write. This value will be stringified. * @param value Static string value to write.
* *
* @codeGenApi * @codeGenApi
*/ */
export function ɵɵtext(index: number, value?: any): void { export function ɵɵtext(index: number, value: string = ''): void {
const lView = getLView(); const lView = getLView();
ngDevMode && assertEqual( ngDevMode && assertEqual(
lView[BINDING_INDEX], lView[TVIEW].bindingStartIndex, lView[BINDING_INDEX], lView[TVIEW].bindingStartIndex,
'text nodes should be created before any bindings'); 'text nodes should be created before any bindings');
ngDevMode && ngDevMode.rendererCreateTextNode++;
ngDevMode && assertDataInRange(lView, index + HEADER_OFFSET); ngDevMode && assertDataInRange(lView, index + HEADER_OFFSET);
const textNative = lView[index + HEADER_OFFSET] = createTextNode(value, lView[RENDERER]); const textNative = lView[index + HEADER_OFFSET] = createTextNode(value, lView[RENDERER]);
ngDevMode && ngDevMode.rendererSetText++;
const tNode = getOrCreateTNode(lView[TVIEW], lView[T_HOST], index, TNodeType.Element, null, null); const tNode = getOrCreateTNode(lView[TVIEW], lView[T_HOST], index, TNodeType.Element, null, null);
// Text nodes are self closing. // Text nodes are self closing.

View File

@ -20,7 +20,6 @@ import {ProceduralRenderer3, RElement, RNode, RText, Renderer3, isProceduralRend
import {isLContainer, isLView, isRootView} from './interfaces/type_checks'; import {isLContainer, isLView, isRootView} from './interfaces/type_checks';
import {CHILD_HEAD, CLEANUP, DECLARATION_LCONTAINER, FLAGS, HOST, HookData, LView, LViewFlags, NEXT, PARENT, QUERIES, RENDERER, TVIEW, T_HOST, unusedValueExportToPlacateAjd as unused5} from './interfaces/view'; import {CHILD_HEAD, CLEANUP, DECLARATION_LCONTAINER, FLAGS, HOST, HookData, LView, LViewFlags, NEXT, PARENT, QUERIES, RENDERER, TVIEW, T_HOST, unusedValueExportToPlacateAjd as unused5} from './interfaces/view';
import {assertNodeOfPossibleTypes, assertNodeType} from './node_assert'; import {assertNodeOfPossibleTypes, assertNodeType} from './node_assert';
import {renderStringify} from './util/misc_utils';
import {findComponentView, getLViewParent} from './util/view_traversal_utils'; import {findComponentView, getLViewParent} from './util/view_traversal_utils';
import {getNativeByTNode, getNativeByTNodeOrNull, unwrapRNode} from './util/view_utils'; import {getNativeByTNode, getNativeByTNodeOrNull, unwrapRNode} from './util/view_utils';
@ -116,9 +115,11 @@ function applyToElementOrContainer(
} }
} }
export function createTextNode(value: any, renderer: Renderer3): RText { export function createTextNode(value: string, renderer: Renderer3): RText {
return isProceduralRenderer(renderer) ? renderer.createText(renderStringify(value)) : ngDevMode && ngDevMode.rendererCreateTextNode++;
renderer.createTextNode(renderStringify(value)); ngDevMode && ngDevMode.rendererSetText++;
return isProceduralRenderer(renderer) ? renderer.createText(value) :
renderer.createTextNode(value);
} }
/** /**

View File

@ -1086,7 +1086,7 @@ export declare function ɵɵtemplate(index: number, templateFn: ComponentTemplat
export declare function ɵɵtemplateRefExtractor(tNode: TNode, currentView: LView): ViewEngine_TemplateRef<unknown> | null; export declare function ɵɵtemplateRefExtractor(tNode: TNode, currentView: LView): ViewEngine_TemplateRef<unknown> | null;
export declare function ɵɵtext(index: number, value?: any): void; export declare function ɵɵtext(index: number, value?: string): void;
export declare function ɵɵtextBinding<T>(value: T | NO_CHANGE): void; export declare function ɵɵtextBinding<T>(value: T | NO_CHANGE): void;