【发布时间】:2013-06-13 02:44:40
【问题描述】:
最近,我读到了 Facebook 的 article,关于他们的新页面流水线系统。目前有几个 Github 项目的实现类似,但都是用 Php 编写的。
什么是 BigPipe?
BigPipe 是 Facebook 提出的一个系统,它使页面加载速度看起来更快。单个页面被分成小pagelet,所以看起来像这样,其中每个框都是一个pagelet:
所以加载整个网页的逻辑变成:
- 客户端向服务器发出的第一个请求,生成的骨架 html 非常快,具有 bigpipe javascript。
- 当客户端收到骨架 HTML 时,它会运行 BigPipe javascript。
- 虽然与服务器的连接保持持久,但“pagelet”会沿管道刷新到客户端并由 bigpipe javascript 呈现。
- 每个 pagelet 的 HTML、CSS 和 JS 在收到时都会下载并呈现,因此每个 pagelet 都是单独加载的,给人一种加载速度更快的感觉。
他们的数据显示页面加载时间提高了大约 2 倍。
问题
在 Pyramid 中实现此功能的主要问题是,我还没有找到一种方法来保持与客户端的持久 HTTP 连接,以便能够将这些“pagelet”刷新到管道中。我已经对response.app_iter 进行了试验,但是生成器的产量不会被刷新,而是首先生成整个响应,然后一次将所有响应都刷新到管道中。有没有办法将多个“响应”刷新到与 Pyramid 的持久连接中?
【问题讨论】:
-
脸书还用
BigPipe吗?那篇文章是 2010 年的 -
如果你能描述系统 (a) 这会更有用 (b) 回答会更容易 (c) 你会更了解它。此外,您对自己陷入困境的描述对任何人都没有帮助。
-
@Marcin 我已经编辑了问题