Angular: производительность влияет на использование литералов объектов в шаблоне компонента для контекста ng-шаблона с помощью ngTemplateOutlet - PullRequest
0 голосов
/ 18 марта 2020

Каково влияние на производительность использования литерала объекта в шаблоне при передаче контекста в 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. И он всегда будет там, если он определен как литерал объекта в шаблоне. Это предполагает, что новый объект создается каждый цикл. Это предположение неверно?

...