rxjava react programming system.reactive

system.reactive - react - ¿Cuáles son los observables calientes y fríos?



rx react (4)

Observable

Conceptualmente, observable es simplemente un envoltorio alrededor de algún origen de datos o eventos, proporcionando una interfaz conveniente para tratar el origen como un flujo de datos que actualiza sus valores en tiempo real.

Observable en frío

En la versión llamada "fría", la fuente no está activa y se puede comparar con planos, clases o prototipos. Por lo tanto, lo observable no produce nada. Como un flujo pendiente o suspendido. Eso lo convierte en un valor puro que puede pasar con seguridad a una función pura. Un buen ejemplo es un contador suspendido que siempre comienza con 1 cuando se activa.

"Suscribirse" a un "observable en frío" realmente significa dos cosas: Crear (o bifurcar) una instancia de flujo de datos activo y conectar el suscriptor. La primera parte es similar a crear objetos de una clase. La segunda parte es la suscripción real y, por sí sola, no tiene nada que ver con la primera parte. A pesar de ser "empaquetado" como una sola "suscripción", que en mi opinión, solo aumenta la confusión.

Observable caliente

El llamado "observable en caliente" ya es una instancia que se está ejecutando. Como un objeto creado a partir del prototipo y listo para usar. Y suscribirse obviamente solo involucra al observador real. No se necesita parte de activación.

Vi el video y conozco los principios generales: caliente incluso cuando nadie está suscrito, el frío sucede "a pedido". Además, Publish () convierte las conversiones de frío a caliente y Defer () de caliente a frío.

Pero aún así, siento que me estoy perdiendo los detalles. Aquí hay algunas preguntas que me gustaría haber respondido:

  • ¿Puedes dar una definición completa de estos términos?
  • ¿Alguna vez tiene sentido llamar a Publish en un observable caliente o Diferir en un resfriado?
  • ¿Cuáles son los aspectos de las conversiones de frío / calor? ¿Se pierden mensajes, por ejemplo?
  • ¿Hay diferencias entre las definiciones de frío y calor para IObservable e IEnumerable?
  • ¿Cuáles son los principios generales que debe tener en cuenta al programar para frío o calor?
  • ¿Algún otro consejo sobre observables de frío / calor?

Espero que esto ayude.

¿Puedes dar una definición completa de estos términos?

Ver la publicación de mi blog en: http://leecampbell.blogspot.com/2010/08/rx-part-7-hot-and-cold-observables.html

¿Alguna vez tiene sentido llamar a Publish en un observable caliente o Diferir en un resfriado?

No, no es que yo pueda pensar.

¿Cuáles son los aspectos de las conversiones de frío / calor? ¿Se pierden mensajes, por ejemplo?

Es posible "perder" mensajes cuando el Observable está activo, ya que los "eventos" suceden independientemente de los suscriptores.

¿Hay diferencias entre las definiciones de frío y calor para IObservable e IEnumerable?

Realmente no entiendo la pregunta. Espero que esta analogía ayude sin embargo. Compararía un Hot Observable con un IEnumerable evaluado con impaciencia. es decir, una Lista o una Matriz se evalúan con impaciencia y se han llenado incluso si nadie encuetra sobre ellas. Una declaración de rendimiento que obtiene valores de un archivo o una base de datos se puede evaluar de forma diferida con la palabra clave Rendimiento. Si bien la pereza puede ser buena, será reevaluada por defecto si un segundo enumerador la sobrepasa. Comparando estos con Observables, un Observable Caliente podría ser un Evento (clic de botón) o una alimentación de temperaturas; estos eventos sucederán independientemente de una suscripción y también se compartirán si se realizaron varias suscripciones a la misma observación. El Intervalo observable es un buen ejemplo de un observable en frío. Solo comenzará a producir valores cuando se realice una suscripción. Si se hacen múltiples suscripciones, entonces la secuencia se volverá a evaluar y los "eventos" ocurrirán en momentos separados (dependiendo del tiempo entre suscripciones).

¿Cuáles son los principios generales que debe tener en cuenta al programar para frío o calor?

Consulte el enlace en el punto uno. También te recomendaría que busques en Publsh que se use junto con RefCount. Esto le permite tener la capacidad de tener una semántica de evaluación Lazy de Cold Observables, pero compartir los eventos que Hot Observables obtiene.

¿Algún otro consejo sobre observables de frío / calor?

Ensúciate las manos y juega con ellos. Una vez que hayas leído sobre ellos durante más de 30 minutos, el tiempo dedicado a codificarlos es mucho más productivo para ti que leer más :)


Los observables calientes son los que empujan incluso cuando no estás suscrito a lo observable. Al igual que los movimientos del mouse, o ticks del temporizador o algo por el estilo. Los observables en frío son los que comienzan a presionar solo cuando te suscribes, y comienzan de nuevo si te suscribes nuevamente.


Sin pretender dar una respuesta completa, me gustaría resumir en una forma simple lo que he aprendido desde el momento de esta pregunta.

Hot observable es una coincidencia exacta para el evento. En los eventos, los valores generalmente se envían al controlador incluso si no hay suscriptores escuchando. Todos los suscriptores están recibiendo el mismo conjunto de valores. Debido al siguiente patrón de "eventos", los observables en caliente son más fáciles de entender que los más fríos.

Cold observable también es como un evento, pero con un giro: el evento de Cold Observable no es una propiedad en una instancia compartida, es una propiedad de un objeto que se produce de fábrica cada vez que alguien se suscribe. Además, la suscripción inicia la producción de los valores. Debido a lo anterior, múltiples suscriptores están aislados y cada uno recibe su propio conjunto de valores.

El error más común que hacen los principiantes de RX es crear un observable en frío (bueno, pensando que están creando un observable en frío) usando algunas variables de estado dentro de una función (total acumulado) y no envolviéndolo en una declaración .Defer (). Como resultado, múltiples suscriptores comparten estas variables y causan efectos secundarios entre ellas.