В чем разница между Knockout.js и Rx.js? - PullRequest
44 голосов
/ 24 февраля 2011

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

Ответы [ 2 ]

63 голосов
/ 23 июля 2011

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

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

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

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

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

20 голосов
/ 24 февраля 2011

На самом деле это совершенно разные фреймворки, хотя я могу понять, почему вы видите кроссовер:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...