Rx.Observable: Cold vs Hot

1. 前言:Observable

Rx.Observable: 可觀察對象。簡單理解就是一個可以被subscribe的對象,它作為數(shù)據(jù)源會不斷的通過next產(chǎn)生新的數(shù)據(jù)。

舉個例子:

  • 當(dāng)前Observable是一個計(jì)數(shù)器
  • 每次的next數(shù)據(jù)加1
  • 訂閱該Observable即可得到當(dāng)前的計(jì)數(shù)
Rx.Observable.create(observer => {
    observer.next(1);
  observer.next(2);
  observer.next(3);
}).subscribe(count => {console.log(count)})

2. Cold 和 Hot

Rxjs中把觀察者(Observable)區(qū)分為熱觀察者(Hot Observable)以及冷觀察者(Cold Observable)。

定義:

  • Cold:訂閱后可以<u>接收到當(dāng)前可觀察對象產(chǎn)生的所有數(shù)據(jù)</u>。
  • Hot:訂閱后僅可以<u>接收到訂閱時間點(diǎn)之后產(chǎn)生的數(shù)據(jù)</u>。

理解:

? 將Observable看作一個Event Emiter,它要做的是將新數(shù)據(jù)往外拋,那么實(shí)際上它還需要一個產(chǎn)生數(shù)據(jù)的Producer。我們理解Cold/Hot觀察者就可以理解為:

  • Cold:Data Producer在observable內(nèi)部,每次訂閱后會new Producer,所有數(shù)據(jù)都會重新發(fā)一次。
  • Hot:Data Producer是在Observable外部,每次訂閱后Producer不受影響,繼續(xù)保持當(dāng)前狀態(tài)產(chǎn)生數(shù)據(jù)。
// cold
Rx.Observable.create(observer => {
    const producer = new Producer()
    ...
})

// hot
const producer = new Producer()
Rx.Observable.create(observer => {
    ...
})

形象的比喻:

? 把Observable看作一個音樂播放器:

  • Cold:給每個聽歌的人發(fā)CD,每個人都可以聽完所有歌。
  • Hot:只有一張CD大家一起聽,先來的人聽得多,后來的人只能聽剩下的。

3. 使用場景

? 實(shí)際上大部分時候我們都是使用的cold observable,每個訂閱者都可以完整的接收到觀察對象的數(shù)據(jù),當(dāng)然也有使用到Hot的情況,同樣以計(jì)數(shù)器來說:

? 計(jì)數(shù)器在一開始就啟動

  • 需要查看整個增長動態(tài)變化情況,長期保持訂閱 => Cold
  • 僅需要查看當(dāng)前時間段的增長,隨時可能取消訂閱 => Hot

以上是對于Cold和Hot Observable的一些個人總結(jié),有不對的地方歡迎指正。謝謝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。