Currently, this is our process for updating workspaces:
1. Fetch/create model
2. Invoke `attributesChanged` which loops through all `m` components, ignoring all but `n` Input-type components.
3. Loop through all `x` attributes, and call `attributesChanged` again for each of `y` non-relation attributes.

So for `n` of the same order as `m`, a rough complexity analysis looks something like `m + yx => theta(yn) => O(n^2)`, for `y` of the same order as `n`.

The new process looks like this:
1. Fetch/create model
2. Waterfall a entity change event to all `n` Input subcomponents, ignoring all but in the worst case `log(k + 1)` internal nodes in a full and perfect tree of `k` levels between workspace and XV.Inputs.

So similarly we have `n + log(k + 1)` => O(n).

So it seems we've come to different conclusions.