Попробую ответить, если правильно понял
Для начала определим возможные проблемы:
1. Сложность написания кода
2. Зависания из-за ререндеринга
3. Зависания из-за обновления громадных сущностей
3 – только в том случае, если сущность очень объемная (сотни полей). Эту проблему можно обойти тем, что часть обхемных атрибутов (например связи) выносить в отдельное место и связывать по id (как нормализация в БД) или превращать тоже в Observable (то есть не все поля, а только это)
2 – в первом случае, у вас будет одна большая подписка, в которую будет падать полный объект и если не разрулить на уровне компонентова понимание "(не)изменилось" будет перерисовывать вееесь элемент и все его дочерние компоненты. Тут соответственно или проверка на изменение или, если компонент небольшой, забить хрен и не париться
1 – первый вариант намного проще
Поэтому, наверное, я бы сделал так: используете первый вариант, не делаете никаких оптимизаций, смотрите на то виснет или не виснет интерфейс при частых обновлениях (например, окажется, что частота обновления настолько большая, что ререндеринг слишком чато происходит)
Далее начинаете писать сравнение на изменение в элементах
Потом превращаете какие-то отдельные атрибуты сущности в Observable (большими кусками) и делаете на них отдельную подписку