I'll try to answer if I understood correctly
To start, let's define possible problems:
- Complexity of writing code
- Freezing due to re-rendering
- Freezing due to updating large entities
3 – only if the entity is very large (hundreds of fields). This problem can be avoided by moving some bulky attributes (e.g., connections) to a separate place and linking them by ID (like normalization in a database) or turning them into Observables (i.e., not all fields, but only these)
2 – in the first case, you'll have one large subscription that will receive the full object, and if you don't handle the "changed or not" understanding at the component level, it will re-render the entire element and all its child components. Here, you can either check for changes or, if the component is small, just ignore it
1 – the first option is much simpler
So, probably, I would do it like this: use the first option, don't make any optimizations, and see if the interface freezes or not when there are frequent updates (e.g., it turns out that the update frequency is so high that re-rendering occurs too often)
Then, start writing comparisons for changes in elements
After that, turn some separate attributes of the entity into Observables (in large chunks) and create a separate subscription for them