天天看點

Node.js實作的BigPipe

無論用java、.net還是python都是可以實作bigpipe的…

拿那篇文章中的php顯示頁做示例:

Node.js實作的BigPipe

先輸出頁面的主體結構:

Node.js實作的BigPipe

然後按順序更新頁面的内容:

Node.js實作的BigPipe
Node.js實作的BigPipe
Node.js實作的BigPipe

2s後輸出header

4s後輸出content

6s後輸出footer

從加載到顯示共消耗約13s (2 + 4 + 6 + 1 ~= 13s),符合預期結果

這個示例的源碼(可複制至本地直接運作):

上面是将界面的顯示順序固定寫死了,下面将展示一個靈活的動态界面:

Node.js實作的BigPipe
Node.js實作的BigPipe
Node.js實作的BigPipe

先輸出6個内容容器,然後建構6個用戶端請求,當收到請求資料時直接傳回給用戶端。如果你需要讓界面的内容按順序顯示,隻需要修改,傳回的delay值,比如按索引值的大小進行修改

這個示例的完整源碼:

上面的示例中并沒有像第一個例子一樣,顯示輸出header資訊('Transfer-Encoding' : 'chunked'),而浏覽器,在response裡卻看到了,猜測是node.js在輸出的時候内部加上去的。

Node.js實作的BigPipe

相比php,node.js内部實作并沒有“緩沖池”的功能,都是直接輸出,很簡單吧…

本文參考:

<a href="http://snoopyxdy.blog.163.com/blog/static/60117440201111159523864/" target="_blank">node.js搭建bigpipe demo時碰到的雷</a>

<a href="http://www.subbu.org/blog/2010/07/bigpipe-done-in-node-js" target="_blank">BigPipe Done in Node.js</a>

<a href="https://github.com/jehrhardt/bigpipe-node" target="_blank">bigpipe-node</a>

<a href="http://www.facebook.com/note.php?note_id=389414033919" target="_blank">BigPipe: Pipelining web pages for high performance</a>