最近,我在Facebook上阅读了article关于他们的新页面流水线系统的信息。目前,有几个Github项目具有类似的实现,但它们都是用Php。
编写的什么是BigPipe?
BigPipe是Facebook提出的一个系统,可以让网页加载更快。单个页面被分成小的小页面,所以看起来像这样,每个框都是一个小页面:
因此,加载整个网页的逻辑变为:
他们的数据显示大约2倍的页面加载时间改善。
问题
在Pyramid中实现这个问题的主要问题是我没有找到一种方法来保持与客户端的持久HTTP连接,以便能够在管道中清除这些“pagelet”。我已经尝试了response.app_iter
,但是生成器的产量没有被刷新,而是首先生成整个响应,然后立即刷新管道。有没有办法在与金字塔的持久连接中刷新多个“响应”?
答案 0 :(得分:1)
从这里开始:https://webob.readthedocs.org/en/latest/differences.html?highlight=stream
这可以使CherryPy流响应主体输出目录。那里 直接没有等价物;您可以使用动态生成的迭代器 做类似的事情。
Pyramid使用webob库对请求和响应进行建模,从上面引用的文档开始。因此,我想说“标准”金字塔/挂架无法做到这一点。
相反,您将不得不使用不同的库来处理响应(可能还有请求)。这可能会为您提供有关如何执行此操作的一些建议:http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/designdefense.html
或者,您可以尝试子类化响应对象以添加该功能,可能通过委托来自另一个支持该功能的库中的代码。
您应该选择一个支持此功能的库,并在Pyramid邮件列表中询问如何最好地将其连接起来。