React React應用程式流式服務端渲染

2021-08-17 23:37:39 字數 2249 閱讀 8389

## 好處

react16推出了流式服務端渲染,它允許你並行地分發html片段。這樣可以讓渲染

出的首位元組有意義的內容給使用者速度更快。

(例子1,上面部分是一次性轉換,下面是流渲染,兩種方式)

而且相對rendertostring,流是非同步的。這個可以讓你的node.js服務一次性渲染多個請求,並且保持在高請求壓力環境下的及時響應。在乙個持續的時間內,如果網路阻塞了,它可以停止react的渲染,並且不會因為重的網路請求影響其他輕請求。

import  from 'react-dom/server';

import frontend from '../client';

// 一開始傳送有意義的頁面部分

response.write('');

// 把元件渲染成流,並且給response

const stream = rendertonodestream();

stream.pipe(response, );

// 當react渲染結束後,傳送剩餘的html部分給瀏覽器

stream.on('end', () => );

});

(以上是例子2)

rendertonodestream返回了乙個可讀流,可以比作水龍頭:它有源源不斷的水,只是被堵住了,等待別人把它擰開。如果用這個可讀流(如果把水龍頭開啟),只需要監聽「data」時間就可以了(如果有新資料到了會自動觸發)

**類似這樣:

import  from 'react-dom/server';

const stream = rendertonodestream();

stream.on

('data', (data) => );

但是我們看例子2並沒有監聽」data「事件,而是直接把流pipe給了response物件。其實啊,

response物件在node.js中是乙個可寫流,可以比做下水道。可讀流通過pipe給可寫流時,

可讀流的資料會被分塊發給可寫流(就像是水龍頭直接和下水道連線了一樣,水源源不斷流通)。

可寫流可以對資料(水)進行任意的處理。

在我們的例子中,我們把元件渲染出來的流(html片段)給了response,response會把片段發給請求的客戶端(比如瀏覽器)。

(可以看到first byte明顯前移動了,說明流渲染更快;因為並行的原因,片段渲染也更快了)

const originalsend = response.send;

response.send = (html, ...other) =>

採用express的中介軟體,提供快取檔案服務:

if (cache.has(request.path)) else })

接下來的問題是:如何渲染html,當你直接把htm的可寫流pipe給了response流。因為response.send不會再被呼叫了,你也無法訪問整個html文件。

transform streams是什麼?它就像是乙個水龍頭的過濾器。可讀流經過它轉換後才會給可寫流。

在我們這裡,我們只是想要快取html並不會轉化資料,具體怎麼做,看**:

import  from 'stream';

const createcachestream = (key) => ,

// 當所有的事件都做完後會呼叫flush()

flush(cb)

});}

然後我們可以在我們的服務端渲染**中使用它:

// 通過過濾器(transform streams)建立了快取

let cachestream = createcachestream(request.path);

// cachesstream接上response

cachestream.pipe(response);

//先把首部分寫到cachestream

cachestream.write('');

// 建立了渲染流

const renderstream = rendertonodestream();

// 渲染流接上cachestream

renderstream.pipe(cachestream, );

renderstream.on('end', () => );

})以上就是主要內容

ios應用程式和應用程式委託

其實說白了,就是乙個類將自己不願意實現的方法以協議的方式定義,同時在這個類中包含有乙個型別為id 泛型類 的例項變數,如果另乙個類實現了這個協議,那麼另外的這個類就可以作為第乙個類的委託物件,前乙個類將自己不願意實現的類委託給後乙個類。因為第乙個類擁有第二個類的引用,所有第乙個類的例項可以直接呼叫第...

使用工作流開發應用程式

使用工作流開發應用程式 nease 原創 參與分 191,專家分 250 發表 2003 8 25 下午9 12 更新 2003 8 26 上午8 09 版本 1.0 閱讀 5581次 在 forrester report 提出的關於工作流程概念定義中,將工作流程比喻為 資訊河流 即日常的業務處理或...

工作流和宿主應用程式交流

wf提供了一組核心服務,例如在sql 資料庫中儲存工作流例項的執行詳細資訊的永續性服務,計畫服務,事務服務和跟蹤服務。除了這些wf也提供了另外一種服務,叫做local service也可以叫做data exchange service。主要是實現工作流和宿主程式之間的通訊,使工作流能夠使用方法和事件...