我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

  Facebook的网站速度是最关键的公司任务之一。在2009年,我们成功意识到了Facebook网站速度的两倍。这是我们工程师团队的重要创新,使其成为可能。在文中,我会向您介绍我们的秘密武器之一。我们称之为BigPipe的巨大潜在技术。

  BigPipe是一个重新设计的基本动态Web服务系统。一般想法是,将网页分解成一个名为pagelets的小块,然后用Web服务器和浏览器建立管道,并在不同的阶段管理它们。这类似于大多数现代微处理器的流水线执行过程:多条指令线通过不同的处理器执行单元,实现更佳性能。虽然BigPipe被重新设计为现有服务网络基础流程,但但它不需要更改现有的Web浏览器或服务器。它通过PHP和JavaScript完全实现。

  动机

  为了更好地了解BigPipe,我们需要了解现有的动态Web服务系统。它的历史可以追溯到万维网的初期,但现在与初始阶段相比没有太大变化。 现代网站超过10年前, 动态效果和交互,但传统的Web服务系统长期以来一直无法跟上当今互联网速度的要求。在传统模式下,用户请求的生命周期如下:

  1。 浏览器向Web服务器发送HTTP请求。

  2。 Web服务器分辨率请求,然后读取数据存储层,开发HTML文件,并使用HTTP响应将其发送到客户端。

  3. 通过Internet将HTTP响应发送到浏览器。

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

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

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

  现代网站的传统模式非常低,因为许多系统按操作顺序运行,不能互相重叠。一些优化技术,如延迟的JavaScript, 并行下载已被在线社区广泛使用,一些关于克服这一点的限制。然而,这些优化具有诸多瓶颈由Web服务器和浏览器的执行顺序引起。Web服务器忙于生成页面时,浏览器空闲,浪费你的循环什么都没有。Web服务器完成生成页面时,并将其发送到浏览器,浏览器是一个性能瓶颈,Web服务器没有帮助。重叠Web服务器的生成时间和浏览器的呈现时间,我们不仅可以减少最后的时间延迟,还可以将用户对用户显示给用户的可见区域。这大大降低了对用户延迟的看法。

  Web服务器的生成时间和浏览器重叠的渲染时间,这是特别有用的。如Facebook的内容丰富。典型的Facebook网页包含许多不同数据表的来源:朋友列表,朋友更新,广告, 等等。传统的Web演示文稿模式中的用户必须等到这些查询数据返回并生成最终文件。然后将其发送给用户的计算机。任何查询延迟都会减慢整个最终文件的生成。

  如何工作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代码。

  执行前三个阶段,从Web服务器,最后四个阶段由浏览器执行。每个Pagelet必须通过所有这些阶段,但是大管在不同阶段同时制作几个伪星类。

  

  (Facebook主页的Pagelets,每个矩形对应于脚轮。)

  上面的图像使用Facebook主页作为一个示例,用于解释如何将页面分解为pagelets。这位主页包括几个Pagelets:“作者Pagelet”, “导航挂钩”,“新闻挂钩”,“请求盒狗头”,“宣传班牙”,“朋友推荐”和“联系人”, 等等。 他们是独立的。 当向用户显示“导航脚轮”时,“新闻Pagelet”仍然可以在服务器上生成。

  在bigpipe,用户请求的生命周期是这样:在浏览器中向Web服务器发送HTTP请求。在收到的HTTP请求中,并且上面存在一些全面的检查。网站服务器立即寄回不可置换的HTML文件,这些包括HTML标记和标签启动标记。该标签包括BigPipe的JavaScript库,用于解决Pagelet后收到的回复。在标签上,有一个模板,它指定页面和Pagelets占位符的逻辑结构。E.G:

  

  向客户渲染后的反应,只要生成Pagelet,Web服务器即可继续接收生成Pagelets。他将立即刷新到JSON编码对象中的客户端,包括所有CSS,JavaScript Pagelet,它的HTML内容,一些元数据所需的资源。E.G:

  

  在客户上, 通过“OnPageardarrive”发送的说明接收寄存器。BigPipe的JavaScript库将首先下载其CSS资源; 下载CSS资源后,BigPipe将在Pagelet的标签HTML中显示其innerhtml。多个Pagelets CSS可以同时下载,它们可以根据各自的CSS下载确认显示顺序。在bigpipe,JavaScript资源的优先级低于CSS和页面内容。所以,在显示所有Pagelets之前,BigPipe不会下载任何Pagelet的JavaScript。然后,所有Pagelets JavaScript异步下载。最后一个Pagelet的JavaScript初始化代码基于其各自的下载完成来确定执行顺序。

  该高并行系统的最终结果是同时执行多个pageletsr的那样的执行阶段。E.G,浏览器可以下载三个Pagelets CSS的资源,还展示另一个Pagelet内容,同时,服务器也在生成新的Pagelet。从用户的角度来看,页面逐渐呈现。页面的页将显示得更快,这大大降低了用户对页面延迟的看法。如果你必须看到你自己的眼睛的区别,您可以尝试以下操作:传统模式和BigPipe。个链接是单模式显示页面。第二个链接是BigPipe管道模式的页面。如果您的浏览器版本较旧,网络速度也很慢。浏览器很差。两页之间的差异更明显。

  性能测试结果

  下图是传统模式和BigPipe性能数据的比较。数据是用户最重要内容的75%的感知延迟时间(例如:新闻被认为是Facebook主页上最重要的内容)。收集数据是加载50次50次并禁用浏览器缓存。该图表明,BigPipe用户在大多数浏览器中减少了延迟的一半。

  网站建设与优化推广方案

  (Facebook主页延迟时间比较)

  值得一提的是,BigPipe由微处理器的管道启发。然而,它们的管道流程之间存在一些差异。E.G,虽然大多数阶段的BigPipe只能用于脚轮,但有时可以同时运行多个Pagelets CSS和JavaScript下载。这类似于过度级微处理器。BigPipe另一个重要的区别在于我们实现了从并行编程引入的“障碍”的概念。所有门一代才能完成特定阶段,如多个Pagelet显示区域,它们都可以执行进一步的JavaScript下载和执行。

  在Facebook,我们鼓励创造性思维。我们不断尝试创新技术,让我们的网站更快。

  作者江长浩是Facebook的研究科学家,他致力于研究制作网站的各种创新。

  (翻译也发现了一些关于BigPipe的文章,Facebook创新之大管:优化页面加入时间,名站技术分析 - Facebook奇特的页面加载技术,Facebook让网站速度提升一代的Bigpipe技术分享,Facebook Bigpipe在Java中完成,打开Bigpipe javascript implementation、Tutorial: Implementing Facebook’s BigPipe Using 网站建设方案策划 ASP.净MVC, 在节点中完成的BigPipe。JS)


网站营销公司 营销型网站制作哪家专业
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线: 13968746378,我们会详细为你一一解答你心中的疑难。项目经理在线
相关阅读

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13968746378

上班时间

周一到周六

公司电话

400-600-6240

二维码
线
在线留言