2011-02-24 5 views
40

¿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?¿Cuál es la diferencia entre Knockout.js y Rx.js?

Respuesta

56

Steve (el creador de Knockout) explained the difference en su blog:

Estoy muy familiarizado con Rx para JavaScript, ya que recientemente utilizó en gran medida de un gran proyecto, y en aspectos de hecho el diseño de Knockout están hechos teniendo en cuenta mis experiencias de Rx.

La diferencia clave entre la aplicación del golpe de gracia del patrón de observador y Rx es que Knockout infiere automáticamente las asociaciones y dependencias entre los observables de código de procedimiento regular sin tener que los especifica por adelantado a través de una API especial funcional. Yo quería Knockout para usar el 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. En primero me entusiasmaba esto y su pureza funcional, pero después de algún tiempo me sentí cada vez más como si estuviera saltando aros incómodos y tuve que inventar formas adicionales de simular el estado para administrar los comandos UI de manera eficiente. Es por eso que, en Knockout, todos los observables pueden tratarse como con estado ; por ejemplo, siempre se puede leer su último valor (que se almacena en caché, por cierto, no se vuelve a calcular hasta que cambia el ).

Rx va más allá de Knockout en avanzado formas de componer secuencias de eventos, mientras que Knockout va más allá de Rx en el desarrollo de interfaz de usuario, lo que le permite unirse a su observables a HTML DOM elementos y plantillas y que los manipule cualquier forma que desee. Rx es excelente en lo que hace, pero no resultó ser exactamente como quería crear UI ricas: de ahí el diseño de Knockout.

20

En realidad, son bastante diferentes marcos, aunque puedo ver por qué te gustaría ver cruzado:

RxJs proporciona un medio de componer las operaciones contra los flujos asíncronos, como los eventos y las peticiones web, e incluye escenarios avanzados como la combinación de flujos (cuando se producen tanto a como B, se inicia este, pero cancelarla si a o B se producen de nuevo)

Knockout es un marco MVVM que le permite administrar el estado de la 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.

+15

Solo quería señalar que ahora puede establecer un puente entre Rx- y Ko-Observables. Vea aquí: https://github.com/cburgdorf/Knockout-Rx/blob/master/app/App.ViewModels.SearchViewModel.js – Christoph

Cuestiones relacionadas