亮网络解锁器,解锁网络数据的无限可能 了解详情
写点什么

Facebook 创新之 BigPipe:优化页面加载时间

  • 2010-08-01
  • 本文字数:1444 字

    阅读完需:约 5 分钟

近日,Facebook 的研究科学家 Changhao Jiang 介绍了一个名为 BigPipe 的技术,这项技术可使 Facebook 站点的访问速度提升一倍。BigPipe 是 Facebook 的创新研究之一,同时也是 Facebook 的“秘密武器”,它能够极大提升站点的性能:在大多数浏览器中,BigPipe 都能将用户感受到的延迟时间降低一半,除了 Firefox 3.6,BigPipe 可以将 Firefox 3.6 的延迟时间降低 50ms 左右,大约降低了 22% 左右。

BigPipe 及相关创新的驱动力是:

相比于 10 年前,现代 Web 站点的动态性与交互性都迈上了一个新台阶,传统的页面处理模型已经无法满足当今 Internet 速度上的需求了。

受到硬件的启发(管道与标量微处理器),Facebook 团队使用 PHP 和 JavaScript(并不需要改变现有的 Web 服务器和浏览器)“重新设计了现有的 Web 服务处理过程”。重新设计的内容包括:将页面处理过程分解为 8 个不同的步骤(每个步骤叫做一个“pagelet”),其中一些步骤可以并行处理。通过返回如下内容来响应最初的页面请求:

一个未闭合的 HTML 文档,包含了 HTML head 标签和 body 标签的第一部分内容。head 标签包含了 BigPipe 的 JavaScript 库,用于解释稍后收到的 pagelet 响应内容。在 body 标签中,有个模板指定了页面的逻辑结构和 pagelets 的占位符。

然后创建 JSON 编码的对象(即 pagelets),里面包含了“pagelet 需要的所有 CSS、JavaScript 资源、HTML 内容以及一些元数据”。

复杂网页不断攀升的加载时间延迟问题已经不是什么新话题了,也有不少人提出使用某种管道技术来提升性能。Aaron Hopkins 在 Die.net 上讨论过如何优化页面加载时间,除了传统的页面请求生命周期外,还有不少影响因素可以影响到页面加载的延迟时间。Aaron 提到的有趣儿的一点是:

IE、Firefox 与 Safari 默认情况下是禁用管道的;Opera 是我所知道的唯一一个启用了管道的浏览器。禁用管道意味着需要应答每个请求,在下一个请求发出前需要释放掉上一个请求所建立的连接。这样就增加了用户等待的延迟时间,平均延迟时间为双向的 ping 时间除以允许的连接数。如果服务器禁用了 HTTP 持续连接(keepalives),那么还需要再进行一次 TCP 三次握手,这又导致一次双向连接,造成延迟时间加倍的后果。

Jiang 并没有说 BigPipe 利用了浏览器所固有的管道功能,实际上却暗示了 BigPipe 并没有这么做,因为他说不需要对现有的服务器与浏览器进行任何改变。一旦浏览器发生了变化(比如 HTML 5 的广泛实现),BigPipe 创新的用途是否还会这么大,我们不得而知。

Kensaku Komatsu 创建了一个示例( The Zinger 谈到了该示例):

… 对 HTML5 Web Sockets 中的数据流与 XML HTTP Request 进行了对比。运行结果令人震惊:565 毫秒对 31444 毫秒,天哪!Web Sockets 快了 55 倍,这是因为 Web Sockets 减少了大量不必要的 header 信息。

该示例使用了 HTTP Pipelining,但通常人们认为这么做有些“危险”:

这并非 HTTP Pipelining。网络传输是由 WebSocket frames 构成的,而非 HTTP 请求与响应。显然,这是由应用作者控制的,并不会遇到 HTTP/1.1 管道的问题。由于 WebSockets 可以在任何时间发送与接收,可以由程序员直接控制,因此它并不会遇到代理干扰(proxy interference)的问题,管道功能是安全的,不应该禁用。

Komatsu 的示例将 Facebook 的创新、HTTP 管道问题以及 HTML 5 的未来有机联系在了一起,尤其是 WebSockets 以及他们最终该如何交互以提升 Web 站点的性能并最大限度地降低用户等待的延迟时间。

查看英文原文: BigPipe at Facebook: Optimizing Page Load Time

2010-08-01 01:3521859
用户头像

发布了 88 篇内容, 共 258.8 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

基于 Kubernetes 的 Serverless PaaS 稳定性建设万字总结

阿里巴巴云原生

阿里云 Kubernetes 云原生

阿里云易立:以云原生之力,实现大模型时代基础设施能力跃升 | KubeCon 主论坛分享

阿里巴巴云原生

阿里云 Kubernetes 云原生 KubeCON

马蹄链MATIC系统开发代码Polygon智能合约质押流动性挖矿

V\TG【ch3nguang】

Downie 4 for Mac(最好用的视频下载软件) 4.6.31中文激活版

mac

Downie4 苹果mac Windows软件 网站视频下载

合约币交易所系统数字货币开发解决方案

V\TG【ch3nguang】

【有奖体验】轻点鼠标,让古籍数字化“重生”

阿里巴巴云原生

阿里云 云原生 函数计算

Linux该如何学习,给你支招

智趣匠

CeresDAO借贷合约/DAO质押挖矿系统开发技术丨python技术语言

V\TG【ch3nguang】

从VSCode迁移到Neovim的体验

SkyFire

vim vscode neovim

云原生场景下高可用架构的最佳实践

阿里巴巴云原生

阿里云 高可用 云原生

蓝易云:T-Pot安装教程。

百度搜索:蓝易云

云计算 Linux 云服务器 Pot honeypot

公平,而非平等

俞凡

管理 组织架构

以生产力为中心:超宽带的跨时代之舞

脑极体

超宽带

工赋开发者社区 | 工业机器人产业链及主要配套厂商

工赋开发者社区

寻找AI时代的关键拼图,从美国橡树岭国家实验室读懂AI存力信标

脑极体

存储

《云原生 AI 工程化实践训练营-先锋系列》开营啦!

阿里巴巴云原生

阿里云 AI 云原生

深势科技基于 Serverless 容器为科研人员打造高效的开发平台

阿里巴巴云原生

阿里云 Kubernetes 云原生 Kubernetes Serverless

Bridge 2024 (br2024) for Mac v14.0.0.102完整激活版

mac

苹果mac Windows软件 Bridge 2024

工赋开发者社区 | 精益与MES融合下的数字化转型

工赋开发者社区

dapp丨defi丨nft丨lp单双币流动性挖矿系统开发

V\TG【ch3nguang】

阿里云在云原生领域喜获多项 OSCAR 开源尖峰案例奖

阿里巴巴云原生

阿里云 开源 云原生

阿里云云原生开放日:云原生火力全开| KubeCon 热点速递 DAY1

阿里巴巴云原生

阿里云 Kubernetes 容器 云原生

蓝易云:Containerd+Kubernetes搭建k8s集群教程。

百度搜索:蓝易云

云计算 Linux Kubernetes 云服务器 Containerd

目前最流行的DeFi流动性挖矿系统开发技术说明

V\TG【ch3nguang】

Koordinator 协同 containerd NRI 增强容器 QoS,提升应用性能

阿里巴巴云原生

阿里云 云原生 Koordinator

阿尔比特(ARBT)DAPP质押挖矿系统开发丨源码技术搭建

l8l259l3365

代码标准之信达雅

agnostic

代码质量

Facebook创新之BigPipe:优化页面加载时间_JavaScript_Dave West_InfoQ精选文章