BigPipe:高性能的"流水线技术"网页

作者:米随随 来源:isd 时间:2010-11-02 12:47:00 

Facebook的网站速度做为最关键的公司任务之一。在2009年,我们成功地实现了Facebook网站速度提升两倍 。而正是我们的工程师团队的几个关键的创新使它成为可能。在本文中,我将向大家介绍我们的秘密武器之一,我们称之为BigPipe的伟大底层技术。

BigPipe是一个重新设计的基础 * 页服务体系。大体思路是,分解网页成叫做Pagelets的小块,然后通过Web服务器和浏览器建立管道并管理他们在不同阶段的运行。这是类似于大多数现代微处理器的流水线执行过程:多重指令管线通过不同的处理器执行单元,以达到性能的最佳。虽然BigPipe是对现有的服务网络基础过程的重新设计,但它却不需要改变现有的网络浏览器或服务器,它完全使用PHP和JavaScript来实现。

动机

为了更好的了解BigPipe,我们需要了解一下现有的动态Web服务系统,它的历史可以追溯到万维网的初期,但现在与初期相比却并没有多少改变。现代网站有着远远高于10年前的动态效果和互动性,但传统的网页服务系统早已无法跟上当今互联网速度的要求。在传统的模式,用户请求的生命周期如下:

  1. 浏览器发送一个HTTP请求到Web服务器。

  2. Web服务器解析请求,然后读取数据存储层,制定一个HTML文件,并用一个HTTP响应把它发送到客户端。

  3. HTTP响应通过互联网传送到浏览器。

  4. 浏览器解析Web服务器的响应,使用HTML文件构建了一个的DOM树,并且下载引用的CSS和JavaScript文件。

  5. CSS资源下载后,浏览器解析它们,并将它们应用到DOM树。

  6. JavaScript资源下载后,浏览器解析并执行它们。

传统模式在现代网站中效率是非常低下的,因为很多系统的操作顺序,不能互相重叠。一些如延时加载JavaScript、并行下载等优化技术已被网络社区广泛采用,以此来克服的一些限制。然而,这些优化却很少涉及Web服务器和浏览器的执行顺序造成的瓶颈。当Web服务器正忙生成一个页面,浏览器处于闲置状态,浪费其周期无所事事。当Web服务器完成生成页面,并将其发送到浏览器,浏览器则成为性能瓶颈并且Web服务器对其无从帮助。重叠Web服务器的生成时间与浏览器的渲染时间,我们不仅可以减少最终的时间延迟,也能使网页更早显示用户可见区域给用户,从而大大减少用户对延迟的感知。

Web服务器的产生时间和浏览器的渲染时间重叠,是特别有用的,如Facebook这样内容丰富的网站。一个典型的Facebook的网页包含许多来源不同的数据资料:好友名单,好友动态,广告等。在传统的网页呈现模式的用户将不得不等到这些查询数据都返回并生成最终文件,然后将其发送到用户的电脑。任何一个查询延迟都将拖慢整个最终文件的生成。

BigPipe如何工作

要利用该Web服务器和浏览器之间的并行性,BigPipe首先分解网页成多个可调用的Pagelets。正如流水线微处理器划分一个指令的生命周期为(如“取指令”,“指令解码”,“执行”,“写回寄存器”等)多个阶段,BigPipe的页面生成过程分为以下几个阶段:

  1. 请求解析:Web服务器解析和完整性检查的HTTP请求。

  2. 数据获取:Web服务器从存储层获取数据。

  3. 标记生成:Web服务器生成的响应的HTML标记。

  4. 网络传输:响应从Web服务器传送到浏览器。

  5. CSS的下载:浏览器下载网页的CSS的要求。

  6. DOM树结构和CSS样式:浏览器构造的DOM文档树,然后应用它的CSS规则。

  7. JavaScript中下载:浏览器下载网页中JavaScript引用的资源。

  8. JavaScript执行:浏览器的网页执行JavaScript代码。

标签:BigPipe,性能,网页
0
投稿

猜你喜欢

  • 如何检测Oracle的ODBC是否连接成功?

    2009-11-24 20:31:00
  • 视觉设计的一致性与用户体验

    2010-01-06 13:38:00
  • SQL SERVER 与ACCESS、EXCEL的数据转换方法分享

    2012-02-25 20:17:22
  • Win7 x64 IIS运行ASP+Access故障完美解决方法(转)

    2012-03-27 18:30:35
  • 由 IE8 User-Agent 更新想到的

    2009-01-12 18:33:00
  • Mysql Innodb引擎优化(参数篇)

    2010-05-02 19:57:00
  • css学习笔记: css新闻列表的特殊做法

    2009-07-19 14:25:00
  • asp长文章分页显示思路

    2007-08-23 13:54:00
  • asp access数据库并生成XML文件范例

    2011-03-29 10:49:00
  • 去掉运行JavaScript时IE产生的警告栏

    2008-09-11 18:07:00
  • 查看Oracle的执行计划一句话命令

    2010-07-16 13:02:00
  • 将以用户为中心的设计嵌入产品设计和开发流程

    2009-08-11 14:27:00
  • asp如何制作一个股票滚屏显示面板?

    2010-07-07 12:27:00
  • ASP 自动采集实现代码

    2011-03-07 11:17:00
  • 彻底解决MySql在UTF8字符集下乱码问题

    2011-06-02 12:02:00
  • CSS控制字体效果的思考

    2011-06-14 09:44:02
  • asp网上购物车实例代码

    2007-10-03 13:43:00
  • 请正确认识MySQL对服务器端光标的限制

    2008-12-17 14:58:00
  • ASP 调用带参数输出的COM接口

    2011-03-17 10:59:00
  • SQL学习笔记四 聚合函数、排序方法

    2011-09-30 11:33:29
  • asp之家 网络编程 m.aspxhome.com