gpt4 book ai didi

python - 在 Pyramid 中实现 Facebook BigPipe 系统

转载 作者:太空狗 更新时间:2023-10-30 00:17:45 25 4
gpt4 key购买 nike

最近,我读了一篇 article通过 Facebook 关于他们的新页面流水线系统。目前有几个类似实现的Github项目,不过都是用Php写的。

什么是 BigPipe?

BigPipe 是 Facebook 提出的一个系统,它使页面加载速度看起来更快。单个页面被分成小的 pagelet,所以它看起来像这样,其中每个框都是一个 pagelet:enter image description here

所以加载整个网页的逻辑就变成了:

  1. 第一次从客户端请求服务器,框架 html 生成非常快,有 bigpipe javascript。
  2. 当客户端收到骨架 HTML 时,它会运行 BigPipe javascript。
  3. 虽然与服务器的连接保持持久,但“pagelets”通过管道刷新到客户端并由 bigpipe javascript 呈现。
  4. 每个 pagelet 的 HTML、CSS 和 JS 在收到时都会下载和呈现,因此每个 pagelet 都是单独加载的,给人一种加载速度更快的感觉。

他们的数据显示页面加载时间缩短了大约 2 倍。

问题

在 Pyramid 中实现它的主要问题是我还没有找到一种方法来保持与客户端的持久 HTTP 连接,以便能够将这些“pagelets”冲入管道。我已经尝试过 response.app_iter,但是生成器的产量没有被刷新,而是首先生成整个响应,然后一次性全部刷新到管道中。有没有办法将多个“响应”刷新到与 Pyramid 的持久连接中?

最佳答案

来自这里:https://webob.readthedocs.org/en/latest/differences.html?highlight=stream

This can make CherryPy stream the response body out directory. There is direct no equivalent; you can use a dynamically generated iterator to do something similar.

Pyramid 使用 webob 库对请求和响应进行建模,上述引用来自文档。因此,我会说没有办法用“标准” Pyramid/塔来做到这一点。

相反,您将不得不使用不同的库来处理响应(可能还有请求)。这可能会给您一些关于如何做到这一点的想法:http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/designdefense.html

或者,您可以尝试子类化响应对象以添加该功能,可能是通过委托(delegate)给另一个支持该功能的库中的代码。

你应该选择一个支持这个的库,然后在 Pyramid 邮件列表上询问如何最好地连接它。

关于python - 在 Pyramid 中实现 Facebook BigPipe 系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17078368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com