我观看了视频,我知道了一般原则 - 即使没有人订阅也会发生热情,冷却发生在"按需".此外,Publish()将冷转换为热,Defer()将冷转换为冷.
但是,我觉得我错过了细节.以下是我想回答的一些问题:
H S*_*ogr 94
来自:Anton Moiseev 的书“Angular Development with Typescript,第二版”。:
冷热观测
有两种类型的可观察对象:热和冷。主要区别在于冷 observable 为每个订阅者创建一个数据生产者,而热 observable 首先创建一个数据生产者,每个订阅者从一个生产者获取 数据,从订阅的那一刻开始。
让我们将在Netflix上看电影与进入 电影院进行比较。把自己想象成一个观察者。任何决定在 Netflix 上观看 Mission: Impossible 的人都将获得整部电影,无论他们何时按下播放按钮。Netflix 创建了一个新的制作人,专门为您播放电影。这是一个冷的 observable。
如果您去电影院并且放映时间是下午 4 点,则在下午 4 点创建制作人,并且流媒体开始。如果有些人(订户)迟到了,他们会错过电影的开头,只能从到达的那一刻开始观看。这是一个热门的 observable。
甲冷观察到开始产生数据时一些代码调用 订阅()在其上的功能。例如,您的应用程序可能会声明一个 observable,在服务器上提供一个 URL 以获取某些产品。只有在您订阅时才会发出请求。如果另一个脚本向服务器发出相同的请求,它将获得相同的数据集。
一个热点观察的产生,即使没有用户感兴趣的数据。例如,智能手机中的加速度计会生成有关设备位置的数据,即使没有应用订阅此数据。即使没有用户对该股票感兴趣,服务器也可以生成最新的股票价格。
Lee*_*ell 30
我希望这有帮助.
你能否对这些术语给出全面的定义?
请参阅我的博客文章:http://leecampbell.blogspot.com/2010/08/rx-part-7-hot-and-cold-observables.html
在热门的观察中呼叫发布或在寒冷中推迟发布是否有意义?
不,不是我能想到的.
热/冷转换的哪些方面 - 例如,您是否丢失了消息?
当Observable为Hot时,可能会"丢失"消息,因为无论订阅者如何都会发生"事件".
IObservable和IEnumerable的热定义和冷定义之间是否存在差异?
我真的不明白这个问题.我希望这个比喻有所帮助.我会将Hot Observable与热切评估的IEnumerable进行比较.即一个列表或一个数组都被热切评估,并且已经填充,即使没有人对它们进行说明.可以使用Yield关键字延迟评估从文件或数据库获取值的yield语句.虽然懒惰可能很好,但默认情况下,如果第二个枚举器在其上运行,则会重新评估.将这些与Observables进行比较,Hot Observable可能是一个事件(按钮点击)或温度馈送; 无论订阅如何,这些事件都会发生,如果对同一个observale进行了多次订阅,也会共享这些事件.Observable.Interval是Cold Observable的一个很好的例子.它只会在订阅时开始生成值.
在为冷或热编程时应该考虑哪些一般原则?
请参阅第一点中的链接.我还建议您查看与RefCount一起使用的Publsh.这使您能够具有Cold Observables的Lazy评估语义,但可以共享Hot Observables获得的事件.
关于热/冷可观测量的任何其他提示?
弄脏你的手并与他们玩耍.一旦你读了它们超过30分钟,那么用它们编写代码的时间对你来说要比阅读它们更有效率:)
Ric*_*ein 19
即使您没有订阅观察者,热观察也会推动.像鼠标移动,或计时器滴答或类似的东西.冷可观察性是指仅在您订阅时才开始推送的,如果您再次订阅则会重新开始.
Ser*_*hov 10
不是假装给出一个全面的答案,我想以最简单的形式总结自我这个问题以来我学到的东西.
热观察与事件完全匹配.在事件中,即使没有订阅者正在侦听,值通常也会被送入处理程序.所有订阅者都收到相同的值集.由于遵循"事件"模式,热观察比冷酷观察更容易理解.
Cold Observable也像一个事件,但有一个转折 - Cold observable的事件不是共享实例上的属性,它是对象的属性,每当有人订阅时从工厂生成.此外,订阅开始生成值.由于上述原因,多个订户被隔离,每个订户都接收自己的一组值.
RX初学者最常犯的错误是使用函数中的一些状态变量(fe累计总数)而不是将其包装到.Defer()语句中来创建一个冷可观察对象(好吧,认为他们正在创建一个冷可观察对象).结果,多个订户共享这些变量并导致它们之间的副作用.
| 归档时间: |
|
| 查看次数: |
11563 次 |
| 最近记录: |