Как наблюдаемые rxjs выполняют сравнение с $watch в Angularjs 1.X?

Я слышал от разных ng-speakers, как $watch опасен для производительности вашего приложения. Мне было интересно, сравнил ли кто-то производительность Rxjs Observable против $watch в приложении AngularJS. Я знаю, что Observables будет частью Angular 2.

Ответы

Ответ 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: он предлагает путь больше, чем приведенное выше описание, и это отличный способ борьбы с асинхронными событиями.