knockout.js reactive-programming rxjs

¿Cuál es la diferencia entre Knockout.js y Rx.js?



reactive-programming rxjs (2)

¿Alguien sabe las diferencias entre RxJs y Knockout ? En mi opinión, aparentemente intentan resolver el mismo problema, construir una interfaz de usuario impulsada por un evento. Pero alguien que ha tenido experiencia con ambos, ¿cómo difieren / cómo son similares? ¿Puedes describir algo sobre ellos para ayudarme a elegir?


En realidad, son marcos bastante diferentes, aunque puedo ver por qué vería el cruce:

RxJs proporciona un medio para componer operaciones contra flujos asíncronos, como eventos y solicitudes web, e incluye escenarios avanzados como la combinación de flujos (cuando se producen A y B, inicie esto, pero cancélelo si A o B aparecen nuevamente)

Knockout es un marco de MVVM que le permite administrar el estado de su interfaz de usuario a través de un modelo que mapea su funcionalidad. Esto permite que la lógica de su vista se separe de su vista.


Steve (el creador de Knockout) explicó la diferencia en su blog:

Estoy muy familiarizado con Rx para JavaScript, habiéndolo usado recientemente en un gran proyecto, y de hecho, aspectos del diseño de Knockout están hechos con mis experiencias de Rx en mente.

La diferencia clave entre la implementación de Knockout del patrón de observador y Rx es que Knockout infiere automáticamente las asociaciones y dependencias entre los observables del código de procedimiento regular sin tener que especificarlos por adelantado a través de una API funcional especial. Quería que Knockout utilizara un código regular de procedimiento / estilo imperativo, ya que es más familiar y accesible para la mayoría de los desarrolladores.

Otra diferencia es que Rx está optimizado para componer flujos de eventos sin estado. Al principio estaba entusiasmado con esto y su pureza funcional, pero después de un tiempo me pareció cada vez más como si estuviera saltando a través de aros incómodos y tuviera que inventar formas adicionales de simular el estado para administrar comandos UI de manera eficiente. Es por eso que, en Knockout, todos los observables se pueden tratar con estado; por ejemplo, siempre se puede leer su último valor (que, por cierto, se almacena en caché), no se vuelve a calcular hasta que los datos subyacentes cambien).

Rx va más allá de Knockout en formas avanzadas de componer secuencias de eventos, mientras que Knockout va más allá de Rx en desarrollo de UI, permitiéndole unir sus observables a elementos y plantillas HTML DOM y manipularlos de la forma que desee. Rx es excelente en lo que hace, pero resultó no ser exactamente como quería construir UI ricas, de ahí el diseño de Knockout.