近日,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
分享到:
相关推荐
6. **测试和优化**:运行 demo,观察页面加载时间,根据实际情况调整 Pagelet 的划分和优先级,以达到最佳性能。 通过以上步骤,我们可以有效地利用 Struts2 实现 BigPipe 技术,从而大幅提高前端页面的加载速度,...
BigPipe是一种由Facebook提出的高效页面加载策略,它通过将一个页面拆分成多个部分(或称为“管道”),并逐个异步加载这些部分,来显著加快网页的初始展现速度。在本文中,我们将探讨BigPipe的设计原理以及如何使用...
BigPipe通过将页面分割成多个部分,然后异步并行加载这些部分,从而显著减少了页面的整体加载时间。 **1. 页面分块加载** BigPipe的核心理念是将一个大的HTML页面拆分为若干个"管道"(Pagelets),每个管道代表页面...
Facebook的BigPipe是一种高效网页加载技术,旨在提升用户体验,通过分块加载页面内容来显著减少网页的加载时间。它最初由Facebook开发,并已开源。在这个Java版本的实现中,我们有机会深入理解BigPipe如何在非PHP...
BIGPIPE 是一种页面渲染优化技术,通过分块加载(Pagelet)和异步执行,显著提升了页面的响应速度,尤其在高并发访问的场景下效果显著。 在压缩包内的文件"BigPipe_Net"和"BigPipe"可能包含了以下内容: 1. ...
在Web开发中,优化页面加载速度和用户体验是一项重要的任务。`BigPipe`是一种技术,最初由Facebook提出,用于提高网页加载效率,通过分割页面为多个部分并异步加载,达到类似流式传输的效果。它使得用户可以更快地...
Webx之BigPipe技术是一种优化Web页面加载性能的方法,它借鉴了Facebook的BigPipe理念,旨在提高用户体验,尤其是在处理大量动态内容的Web应用中。Webx是一个基于Java的开源Web框架,而BigPipe则是Webx框架中的一个...
BigPipe是由Facebook开发的一种页面渲染优化技术,它的核心思想是将一个完整的网页拆分成多个小的、独立的部分,称为"Pagelets"。这些Pagelets可以并行加载,极大地提高了页面的首屏渲染速度,从而提升用户的感知...
它借鉴了操作系统中的管道(pipe)概念,将一个完整的页面拆分成多个小的部分(称为流或管道),然后并行地传输这些部分,从而显著减少了页面加载时间。 ### 一、bigPipe技术基础 1. **分块加载**:bigPipe的核心...
BigPipe 技术,最初由 Facebook 提出,是一种有效的页面异步加载策略,它能显著降低页面加载时间,尤其是在处理复杂、数据丰富的动态页面时。本文将探讨如何使用 Node.js 结合 BigPipe 来实现这一技术,并讨论其优...
它最初由 Facebook 提出,目的是将一个大页面拆分成多个小的部分(称为“管道”或“页面片段”),然后逐个异步加载这些部分,从而实现页面的渐进式渲染。本文将深入探讨如何使用 Java 来实现 BigPipe,并逐步解析其...
这样显著减少了页面加载时间,提高了用户体验。 Caching是另一种关键的性能优化策略。Facebook的PageCache机制缓存了用户访问过的页面,将其存储在浏览器中,以便再次访问时能够快速加载。这种缓存策略减少了服务器...
.NET BIGPIPE是一个优化Web应用程序性能的技术,特别是在ASP.NET框架下,它通过分块传输页面响应来减少页面加载时间。此技术灵感来源于Facebook的BigPipe,旨在改善用户在浏览网页时的感知速度。在.NET中实现BigPipe...
ASP.NET MVC 2.0 BigPipe 假想是一种优化Web应用性能的技术,灵感来源于Facebook的BigPipe。BigPipe的主要思想是将页面加载分为多个独立的部分,这些部分可以并行加载,从而显著提高页面渲染速度,提升用户体验。在...
### Bigpipe命令_V45 知识点解析 #### 一、Bigpipe 命令概览 在 Dell PowerApp.BIG-IP 参考指南中提到的 Bigpipe 命令_V45 是一系列用于管理和配置 PowerApp.BIG-IP 设备的工具集。这些命令可以帮助管理员执行各种...
- **感知延迟:** 用户实际感受到的页面加载时间。 #### BigPipe架构介绍 为了解决上述问题,Facebook引入了BigPipe架构。BigPipe是一种异步网页流式加载技术,能够显著提高网页加载速度,并降低用户的感知延迟。 ...
配置热加载:在线服务无需重启即可立即加载配置,流量0损失 优雅退出:处理完剩余任务后退出,流量0损失 超强性能:无锁,协程并发,单进程即可充分利用多核,满足一般流量需求 容错机制:对下游实施限速,限并发,...
大管道(BigPipe)是一种优化网页加载速度的技术,最初由Facebook开发并应用于其动态新闻feed的渲染。它的核心思想是将一个完整的网页拆分成多个部分,或者称为“页面片段”(Pagelets),然后并行地、逐个加载这些...
### Facebook Web优化策略 在数字化时代,随着互联网技术的飞速发展与用户需求的日益增长,网站性能成为了衡量用户体验和企业竞争力的重要指标之一。作为全球知名的社交网络平台,Facebook不仅面临着海量用户数据...