Ответ 1
Два механизма наблюдения за изменениями по своей сути различны.
$watch
- механизм грубой силы, основанный на тяге. Когда наблюдатель активен и (как правило) должен посещать каждый наблюдаемый объект/выражение после любого изменения. Разумеется, чем больше наблюдать медленнее весь процесс.
Observable
реализует механизм push-based. Наблюдатель пассивен и получает уведомление, когда что-то изменилось. Правильно реализовано это позволяет гораздо более интеллектуальное распространение изменений.
Из того, что я знаю, использование Observable
в angular 2.0 является необязательным, но рекомендуется. Более того, angular 2.0 будет реализовывать однонаправленный поток данных, подобный flux. Изменения данных распространяются только вниз в DOM - компонент может непосредственно наблюдать/зависеть от данных своих предков, но не их потомков. После изменения есть гарантия, что только некоторое поддерево DOM нуждается в обновлении. В большинстве случаев это поддерево будет намного меньше, чем весь DOM.
Существует отличное видео от 2015 года ng-conf benchmarking angular 1.x, реагировать и angular 2.0. (не уверен, что он использует Observables, хотя)
Последнее, что касается Observable
: он предлагает путь больше, чем приведенное выше описание, и это отличный способ борьбы с асинхронными событиями.