Move ChangeApplier over to "immutable application" model

Description

The current ChangeApplier's idiom for applying updates and relays is highly inefficient in many cases, especially where the meaning of relay rules is to simply share parts of model contents without modification.
We should move over to a system where model contents are considered immutable as JS objects and any mutation is performed by a shallow "clone to root", and all implicit model relays are operated by reference sharing. This will offer performance characteristics similar to contemporary systems such as redux etc. but it should be noted that this will not necessarily be the best choice for all users - where large models are frequently receiving updates to isolated values we can generate less garbage by updating them in place (although realising these savings would also require reducing the other bookkeeping structures managed by the ChangeApplier.
This model is described at https://wiki.fluidproject.org/display/fluid/New+New+Notes+on+the+ChangeApplier .

Environment

None

Activity

Show:

Details

Assignee

Reporter

Components

Priority

Created August 23, 2019 at 12:36 PM
Updated July 19, 2024 at 12:03 PM