Подтвердить что ты не робот

Какая разница между Knockout.js и Rx.js?

Кто-нибудь знает различия между RxJs и Knockout? Мне кажется, что они пытаются решить одну и ту же проблему, чтобы создать интерфейс, управляемый событиями. Но кто-то, у кого есть опыт работы с обоими, как они отличаются/как они похожи? Можете ли вы описать что-то о них, чтобы помочь мне выбрать?

4b9b3361

Ответ 1

Стив (создатель нокаута) объяснил разницу в своем блоге:

Я очень хорошо знаком с Rx для JavaScript, недавно использовал его в значительной степени на большой проект, и на самом деле аспекты дизайна Нокаут производится с учетом моего опыта Rx.

Ключевое различие между реализацией нокаутов шаблона наблюдателя и Rxs является что нокаут автоматически регистрирует ассоциации и зависимости между наблюдаемыми из обычного процессуального кодекса, без необходимости задайте их заранее, используя специальный функциональный API. я хотел Нокаутом, чтобы использовать обычный процедурный/императивный стиль, поскольку его больше знакомый и доступный для большинства разработчиков.

Другое отличие что Rx оптимизирован для составления потоков событий без состояния. В сначала я был в восторге от этого и его функциональной чистоты, но через некоторое время все это становилось все более похожим на то, что я прыгал через неудобные обручи и пришлось изобретать дополнительные способы моделирования состояния для управления Пользовательский интерфейс работает эффективно. Вот почему, в Нокауте, все наблюдаемые могут быть обработанными как состояние - например, вы всегда можете прочитать их последние значение (которое кэшируется, кстати, оно не пересчитывается до тех пор, пока основные изменения данных).

Rx идет дальше, чем нокаут в продвинутый способы составления потоков событий, тогда как нокаут идет дальше, чем Rx в разработку пользовательского интерфейса, позволяя привязывать его наблюдаемые к HTML DOM элементов и шаблонов и манипулировать ими любым способом. Rx - отлично подходит для того, что он делает, но оказалось не таким, каким я хотел создавать богатые пользовательские интерфейсы - отсюда дизайн нокаута.

Ответ 2

Они на самом деле совсем разные рамки, хотя я вижу, почему вы видите кроссовер:

RxJs предоставляет средства для составления операций против асинхронных потоков, таких как события и веб-запросы, и включает в себя расширенные сценарии, такие как объединение потоков (когда происходят как A, так и B, запустите это, но отмените его, если A или B снова появляются)

Нокаут - это структура MVVM, которая позволяет управлять состоянием вашего пользовательского интерфейса с помощью модели, которая отображает ее функциональность. Это позволяет отделить вашу логику просмотра от вашего представления.