Каково влияние на производительность использования литерала объекта в шаблоне при передаче контекста в ng-template?
<ng-container *ngTemplateOutlet="template;context:{ field: value };"></ng-container>
по сравнению с:
<ng-container *ngTemplateOutlet="template;context:context;"></ng-container>
context = { field: value }
Идет ли обнаружение изменений запускаться чаще в первом случае, так как он (предположительно) создает новый объект?
https://github.com/angular/angular/blob/c2868de25a0fe4e14e4da4aae6aa2d5867711d05/packages/common/src/directives/ng_template_outlet.ts
/**
* We need to re-create existing embedded view if:
* - templateRef has changed
* - context has changes
*
* We mark context object as changed when the corresponding object
* shape changes (new properties are added or existing properties are removed).
* In other words we consider context with the same properties as "the same" even
* if object reference changes (see https://github.com/angular/angular/issues/13407).
*/
private _shouldRecreateView(changes: SimpleChanges): boolean {
const ctxChange = changes['ngTemplateOutletContext'];
return !!changes['ngTemplateOutlet'] || (ctxChange && this._hasContextShapeChanged(ctxChange));
}
Судя по этому, я бы сказал, действительно имеет значение, потому что вызов функции дороже, если "ngTemplateOutletContext"
находится в changes
. И он всегда будет там, если он определен как литерал объекта в шаблоне. Это предполагает, что новый объект создается каждый цикл. Это предположение неверно?