为什么bigpipe需要“冲洗”?

时间:2012-10-31 07:01:59

标签: node.js

https://github.com/jehrhardt/bigpipe-node/blob/master/app.js http://www.subbu.org/blog/2010/07/bigpipe-done-in-node-js

我注意到bigpipe的所有实现都需要“刷新”HTML。换句话说,总会发生这样的事情:

// header n stuff

res.write('<script>function flushHTML(id, html) {'
  + 'document.getElementById(' + id + ').innerHTML = ' + html
  + '};</script>')

// more stuff

// a "pagelet"
res.write('<script>flushHTML(' + someID + ', ' + myHTML + ');</script>')

res.end('</body></html>')

为什么不能在没有刷新的情况下res.write(html)每个部分?

1 个答案:

答案 0 :(得分:1)

重点是将生成整个HTML的大任务分成许多小任务(也就是小页面)。例如,假设您要向浏览器发送两件事:用户详细信息和他刚刚进行的事务的详细信息。您可以从DB加载用户并将其发送到浏览器,然后从DB加载事务并将其发送到浏览器,而不是同时执行这些任务(即从DB加载数据)和发送HTML。

这可以带来更好的用户体验和更快的加载时间(因为浏览器通过块生成HTML块,这比一次性更高效)。

请注意,这是由Facebook开发的(或至少被广泛使用),因此请阅读本文以获取更多信息:

http://www.facebook.com/note.php?note_id=389414033919