Facebook Bigpipe技术算法

时间:2012-02-02 03:11:18

标签: javascript facebook

enter image description here

我一直在研究Facebook的bigpipe技术的流程,但我有这个问题。

这件事是如何实施的?是通过ajax请求收到的小页面吗? 我一直在寻找这个bigpipe的源代码,但它指向了一个404页的github。

有人可以用低级(编程算法)方式解释这个大管。我真的对这种技术感兴趣。

提前致谢

5 个答案:

答案 0 :(得分:5)

嗯,不,主要内容和小页面都是通过相同的连接收到的。小页面只是在生成到浏览器时进行流式处理,并使用Javascript放在文档中。

您可以在PHP here中找到一个开放(且简单)的BigPipe实现。

答案 1 :(得分:1)

我最近开发了一个简单的页面框架。核心思想是将页面分成几个特征,每个特征将并行处理。每个功能的输出都是一个HTML段,然后框架按布局配置进行组装。第一个版本并不完美。如果您有兴趣,请点击此处https://github.com/chennanfei/Moonlight

答案 2 :(得分:1)

在详细解释Bigpipe如何工作之前,我会提到我开发了实现Bigpipe的Django扩展。 Bigpipe-Response
我将使用Bigpipe-Response代码来说明Bigpipe如何工作。

Bigpipe在以下步骤中使用浏览器建立的初始连接:

  1. 浏览器将打开HTTP连接并请求一个WEB页面。
  2. 服务器将发回HTML。
    一种。不关闭</BODY></HTML>标签。这种浏览器方式假定连接仍处于打开状态。
    b。 HTML将包含空的<DIV id="pagelet-1"></DIV>元素,其中bigpipe会填充页面内容。
    C。页面顶部包含小型javascript(请参阅第3步)

  3. 在页面顶部,有一个小的javascript函数,该函数接受JSON并使用该JSON内容填充页面。 bigpipe.js

  4. 虽然连接仍处于打开状态,但服务器将在内部向所有pagelet打开请求。 here
  5. 当来自pagelet的响应可用时,服务器会将响应数据包装为JSON(包括JS,CSS,i18n,链接等)。并将其作为javascript函数调用的参数发送。 see here
  6. renderPagelet文件中的函数Bigpipe.js将使用JSON数据填充HTML页面。
  7. 当所有小页面都提供完毕后,服务器将发送关闭的</BODY></HTML>标签。
  8. HTTP连接将在此处关闭

希望这会有所帮助。 有关更多信息,请参阅文档Here

答案 3 :(得分:0)

我是一名asp .net mvc开发人员。我找到了一个很好的例子,说明如何使用asp .net mvc管道实现BigPipe。你可以在这里找到源代码和解释:

https://github.com/JMPerez/BigPipe

他还试图检查JavaScript是否存在,如果它不存在,内容将被刷新到服务器上的视图中。我喜欢他的文章,因为他也讨论了他的实施的缺点。

我正在尝试将他的例子应用于ZenZoy 祝我好运。

答案 4 :(得分:0)

您可以查看bigpipe here

的Java实现