Watch Collection + NgFor Perf Testing

matsko@google.com
May 15th 2020

Watch

Collection

  • Pipe used to bridge the gap for ngClass and ngStyle
  • Shallow watches arrays and maps
  • Returns a new collection if the ref or contents change

Watch

Collection + NgFor

  • Maybe WatchCollection could be used on top of NgFor?
  • NgFor does shallow-watching automatically
  • Maybe opt-in?

Watch

Collection + NgFor

  • Maybe WatchCollection could be used on top of NgFor?
  • NgFor does shallow-watching automatically
  • Maybe opt-in?
<!--
  items is
  collection-watched
-->
<div *ngFor="
  let item of items">

<!--
  now its shallow-watched
-->
<div *ngFor="let item of
  items
  | watchCollection">

Perf Testing Required

  • It's not clear whether or not NgFor + WatchCollection is good enough
  • Benchmarking is required

How did we test out NgFor?

  • Test when idle (no bindings are being updated)
  • Test when references change (new arrays)
  • Test mutations

Suite #1

  • Clear that NgFor is doing a lot of extra work just sitting idle
  • Not deep watching yields something of a 50x benefit

Suite #2

  • Changing references is no different (because no deep watching occurs)

Suite #3

  • Mutation changes are much faster without watchCollection (no diffing required)
  • Watch collection is to the same speed as NgFor master

WatchCollection + NgFor Perf Testing

By Matias Niemelä

WatchCollection + NgFor Perf Testing

  • 175