BigPipe:高性能的"流水线技术"网页(3)
作者:米随随 来源:isd 发布时间:2010-11-02 12:47:00
在客户端在收到Pagelet通过“onPageletArrive”发出的指令,BigPipe的JavaScript库将首先下载它的CSS资源;在CSS资源被下载完成后,BigPipe将在Pagelet的标记HTML显示它的innerHTML。多个Pagelets的CSS可在同一时间下载,它们可以根据其各自CSS的下载完成情况来确认显示顺序。在BigPipe中,JavaScript资源的优先级低于CSS和页面内容。因此,BigPipe不会在所有Pagelets显示出来之前下载任何Pagelet中的JavaScript。然后,所有Pagelets的JavaScript异步下载。最后Pagelet的JavaScript初始化代码根据其各自的下载完成情况来确定执行顺序。
这种高度并行系统的最终结果是,多个Pageletsr的不同执行阶段同时进行。例如,浏览器可以正在下载三个Pagelets CSS的资源,同时已经显示另一Pagelet内容,与此同时,服务器也在生成新的Pagelet。从用户的角度来看,页面是逐步呈现的。最开始的网页内容会更快的显示,这大大减少了用户的对页面延时的感知。如果您要自己亲眼看到区别,你可以尝试以下连结: 传统模式和BigPipe。第一个链接是传统模式单一模式显示页面。第二个链接是BigPipe管道模式的页面。如果您的浏览器版本比较老,网速也很慢,浏览器缓存不佳,哪么两页之间的加截时间差别将更加明显。
性能测试结果
下图是传统模式和BigPipe性能数据比较图,数据是75%用户对一个页面中最重要的内容(例如:新闻动态被认为是在Facebook主页上最重要的内容)的感知延迟时间。收集数据方式是加载Facebook主页50次并且禁用浏览器缓存。该图显示BigPipe使用户在大多数浏览器中感受到的延迟减少了一半。
(Facebook主页的延迟时间对比)
值得一提的是BigPipe是从微处理器的流水线中得到启发。然而,他们的流水线过程之间存在一些差异。例如,虽然大多数阶段BigPipe只能操作一次Pagelet,但有时多个Pagelets的CSS和JavaScript下载却可以同时运作,这类似于超标量微处理器。BigPipe另一个重要区别是,我们实现了从并行编程引入的“障碍”概念,所有的Pagelets要完成一个特定阶段,如多个Pagelet显示区,它们都可以进行进一步JavaScript下载和执行。
在Facebook,我们鼓励创造性思考。我们不断的尝试创新技术,以使我们的网站更快。
作者蒋长浩目前是Facebook的研究科学家,他致力于研究使网站更快的各种创新。
(译者还找到了几篇关于BigPipe的文章,如果有兴趣大家可以了解下:Facebook创新之BigPipe:优化页面加载时间、名站技术分析 — facebook奇特的页面加载技术、Facebook让网站速度提升一倍的BigPipe技术分析、Facebooks BigPipe Done in Java、Open BigPipe javascript implementation、Tutorial: Implementing Facebook’s BigPipe Using ASP.Net MVC、BigPipe Done in Node.js)


猜你喜欢
- 只要把下面代码放到index.asp或者default.asp中,只要在首页代码顶部引用call Check_Wap(),这个也是我的工程中
- 前言需要导入以下包,没有的通过pip安装import matplotlib.pyplot as pltimport cv2from PIL
- 井字棋,英文名叫Tic-Tac-Toe,是一种在3*3格子上进行的连珠游戏,和五子棋类似,由于棋盘一般不画边框,格线排成井字故得名。游戏需要
- 无意间碰到的一个大神整理的Python学习思维导图,感觉对初学者理清学习思路大有裨益,非常感谢他的分享。14 张思维导图基础知识数据类型序列
- 要想创建一个iterator,必须实现一个有__iter__()和__next__()方法的类,类要能够跟踪内部状态并且在没有元素返回的时候
- 上一节除了介绍使用 Python 连接 es,还有最简单的 query() 方法,这一节介绍一下几种其他的查询方式。1、query() 方法
- 作者的blog:http://www.planabc.netz-index属性简介引用:z-index : auto | numberaut
- 我就废话不多说了,大家还是直接看代码吧!# -*- coding: utf-8 -*-"""Created o
- 在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能
- 一. 新建服务器用户: 用户管理,主要的工作就是建立一个合法的用户帐户、设置和管理用户的密码、修改用户帐户的属性以及在必要时删除已
- 虽然不怎么新鲜,但相信还是有许多人不知道,好,不说废话,直接给方法:开始--->运行,输入cmd,接着输入以下内容加密:C:\WIND
- 注:代码用 jupyter notebook跑的,分割线线上为代码,分割线下为运行结果1.导入库生成缺失值通过pandas生成一个6行4列的
- 尝试用python写文件,但是无法写入文件,文件内容为空。原代码片段如下,poem = "This is a poem"
- 本文所依赖的环境为:进程和线程的概念进程概念我们想运行一个程序,首先会将该程序从存储介质上通过IO总线加载进内存中,而后再通过cpu进行调度
- Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,本文就举一例Python类继承的实例。实例代码如下:#! /usr/bi
- Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站!学习django学得超级吃力
- 引言您可以使用df.loc()函数在Pandas DataFrame的末尾添加一行:#add row to end of DataFrame
- 有时候,女神发来一条消息,说约你看电影,她考虑了一下,又撤回了,不约你了…而你又想知道她究竟发了什么,该怎么办?微信防撤回了解一下。环境要求
- 本文实例讲述了python异常处理用法。分享给大家供大家参考,具体如下:之前用Java的时候,在容易出错的地方我们经常使用try…catch
- 利用oracle的dbms_random包结合rownum来实现,示例如下,随机取499户: select * from ( select