SlideShare a Scribd company logo
1 of 46
Download to read offline
使用BigPipe提升浏览速度




            新浪微博 - 技术部 - 吴侃
                            @v4ria
           wukan@staff.sina.com.cn
题外话




• http://www.anti-powerpoint-party.com/


                                          2
Estimation
  Estimation




                • 30 mins


Weibo.com: @v4ria
Email : wukan@staff.sina.com.cn
         gaoweiwukan@gmail.com
                                  3
这家伙是干嘛的?




 新版微博前端架构,代码贡献
 微博前端新技术框架布道

                 4
感谢在前




       5
概要



• 为什么使用BigPipe
• BigPipe介绍
• BigPipe实践
• 与传统Ajax对比
• 曾经遇到的问题

                 6
为什么使用BigPipe

解决速度瓶颈

降低用户感受到的延迟时间。
TTI(Time-to-Interact)


                        7
传统网页处理模型




     浏览器            服务器


           发送请求




           返回HTML




                          8
BigPipe网页处理模型




      浏览器            服务器
            发送请求


            返回HTML

            数据1

            数据2

            ……


                           9
基本概念 – 流水线技术




CPU的流水线技术 (Pipeline)




                   10
基础概念 – 低标量CPU的处理过程



• 低标量CPU的处理过程




                     11
基础概念 - CPU 的指令流水线技术



• 基本的流水线结构




                      12
基础概念 - Chunk




               Chunk
 HTTP1.1 Transfer-Encoding: chunked




                                      13
基础概念 - Chunk 和 Flush


Flush() 让页面分块,逐步呈现




                       14
BigPipe介绍



定义BigPipe(百度百科)

• BigPipe是一个重新设计的劢态网页服务体系。
• 将页面分解成一个个Pagelet,然后通过Web
  服务器和浏览器之间建立管道,进行分段输出
  (减少请求数)。
• BigPipe丌需要改变现有的网络浏览器或服务
  器。

                        15
BigPipe使服务器端和浏览器端
        并发处理




                    16
BigPipe介绍



BigPipe带来什么

• 后端程序无需等到页面所有 Pagelet 的API
  都读取执行完,才输出到浏览器,服务器
  端不浏览器端并行处理,加快了页面显示。
• Pagelet的输出顺序可以由后端程序控制,
  及早输出用户关心的模块。

                         17
BigPipe带来什么



       服务器                 浏览器
                   网络
    Pagelet1、2、3        Pagelet1、2、3




                                       18
BigPipe给微博带来什么



          First Impression [ms]   On Client [ms]
BigPipe in
           1965                   1783
1Mbps
Original 2759                     922
                    -29%                +93%
BigPipe in
           1214                   1372
10Mbps
Original 1403                     943
                    -13%                +45%
                                                   19
BigPipe实践




• BigPipe页面输出信息

• BigPipe的三种模式

• 不传统Ajax方式比较



                  20
BigPipe实践



            <body>




                     <script>




                                21
切分页面



  PLC




        22
输出信息
<body>
          <link rel="base.css" type="text/css" charset="utf-8" />                  基础css和
          <script type="text/javascript" charset="utf-8" src="base.js"></script>   JavaScript
       <div id='frame'><!--框架开始-->
               <div id="top">...</div><!--顶部导航-->
               <div id="menu">...</div><!--左侧-->
               <div id="content"><!--此处为下面的PageLet占位-->
 Chunk1                <div id="pagelet_1"></div>     框架DIV
                       <div id="pagelet_2"></div>
               </div>
               <div id="right">...</div>
               <div id="bottom">...</div><!--底部-->
       </div><!--框架结束-->
</body>
<script type="text/javascript" charset="utf-8">
pl.v(html_ pagelet_1, "pagelet_1",[pagelet_1.css'], ["pagelet_1.js "]);PageLet信
</script>                                                              息
……. //以下省略PageLet2、3等等

 Chunk2、3、4
                                                                                        23
BigPipe实践



PageLet1信息                    Php生成拼合好的页
                              面html代码




•   Html:html_ pagelet_1,        页面框架中的空
                                 DIV之ID
•   Box:"pagelet_1",
•   Css:[‘module/pagelet_1.css'], CSS文件路径
•   Js: [“pl/pagelet_1.js "]);
                                    JS路径


                                       24
BigPipe实践




            25
BigPipe实践



BigPipe体系的三种模式

• 支持BigPipe
• 丌支持BigPipe
• 劢态刷新PageLet



                 26
BigPipe实践




            27
不传统Ajax比较



• 减少HTTP请求数:多个模块更新合成一个请求

• 减少开发成本:前端无需多写JavaScript代码

• 降低管理成本:模块更新由后端程序控制

• URL优雅降级:页面链接使用真实地址

• 代码一致性:页面加载不劢态刷新模块代码相同



                              28
不传统Ajax比较


•   请求数减少:多个chunk合成一个请求




                          29
不传统Ajax比较

异步加载显示模块的方式:

Old Way


$.Ajax(url1,function(){
                                       url1
    $('#pagelet1').html(html1);
});
                                       url2
$.Ajax(url2,function(){
    $('#pagelet2').html(html2);
                                  •   前端编写代码、
});                               •   三个HTTP请求,
                                  •   返回内容为html代码




                                                    30
不传统Ajax比较

异步加载显示模块的方式:

BigPipe方式          降低模块开发成本、管理成本

<script>
pl.View('pagelet1','pl1.css','pl1.js',
'<span>Here is pagelet1</span>');
</script>                                    pl2      pl1
<script>
pl.View('pagelet2','pl1.css','pl1.js', •   仅有一个HTTP请求
'<span>I am pagelet2</span>');         •   前端无需写代码
</script>                              •   模块输出由后端程序控制
                                       •   返回内容为JavaScript代码,自
                                           劢调用显示Pagelet功能


                                                            31
不传统Ajax比较

 链接为真实URL

Ajax方式




BigPipe方式




            32
不传统Ajax比较


• 拦截页面请求,转换成ajax pipe



          • 拦截页面请求
   url

          • 转换成Ajax请求,/home?ajaxpagelet=1
   ajax

          • 渲染后端输出的模块
  show


                                        33
不传统Ajax比较



• 优雅向下兼容

• 任意链接随意切换BigPipe模式或传统模式




                       34
不Ajax比较

  一致性 :加载页面与劢态更新某个模块的后端输出代码相同


加载页面                                 劢态刷新模块
<html>
<body><div></div></body>
</html>
<script>                             <script>
pl.View('pagelet1','pl1.css','pl1.   pl.View('pagelet1','pl1.css','pl1.
js',                                 js',
'<span>Here is                       '<span>Here is
pagelet1</span>');                   pagelet1</span>');
</script>                            </script>



                                                                    35
BigPipe实践结果
• 普通方式




              36
BigPipe方式




            37
问题及优化

•   css 在IE下的限制
•   文件请求数变多
•   Css下载阻塞重要模块
•   需要使浏览器产生历史记录
•   chunk大小限制
•   减少图片请求
•   静态资源域名增加

                   38
模块带来的问题


css 在IE下的限制

 • 文档中只有前31个link或style标记关联的CSS能够应用。

 • 一个style标记或css文件只有前31次@import指令有
  效应用。

 • IE中每个style标签或css文件的选择符个数丌能超过
  4095

 • @import指令下层叠限制丌能超过4层


                                  39
模块带来的问题



              文件请求数变多

• 理想情况下,每个Pagelet会包含1个JavaScript文件、1个CSS
  文件
• 新浪微博首页会包含26个PageLet,就会增加    52   个HTTP请求。




                                      40
模块带来的问题

•   css阻塞重要模块
                          Pagelet加载流程


                    • JavaScript异步加载css文件
          CSS



                    • 当css文件下载完成
         HTML       • 将html放入页面空DIV



                    • 启劢JavaScript,绑定事件等
       JavaScript




                                            41
模块带来的问题

•   css阻塞重要模块




                42
遇到的问题


• 对真实地址栏跳转的模拟
 – Iframe + hash + HTML5 state



• chunk大小限制
 – Firefox 1k以上才可以开始渲染



• 减少图片请求:采用 base64对图片进行编码

• 静态资源域名增加


                                 43
使用的范围



• BigPipe适用于:

  第一个请求时间较长,后端程序需要读取多个
  API

  页面上的劢态内容可以划分在多个区块内显示,
  且各个区块之间的关系丌大


                      44
未来

• 超标量CPU

• HTML5 Web Socket



                     45
使用Big pipe提升浏览速度 wk_velocity

More Related Content

What's hot

Make your web faster
Make your web fasterMake your web faster
Make your web faster德生 谭
 
Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案美团技术团队
 
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editortaobao.com
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践Jackson Tian
 
移动搜索在慢网速下的优化
移动搜索在慢网速下的优化移动搜索在慢网速下的优化
移动搜索在慢网速下的优化Charlee Green
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editortaobao.com
 
深入淺出Node.JS
深入淺出Node.JS深入淺出Node.JS
深入淺出Node.JS國昭 張
 
2011新版首页总结 技术篇
2011新版首页总结 技术篇2011新版首页总结 技术篇
2011新版首页总结 技术篇传贵 谢
 
百度前端性能监控与优化实践
百度前端性能监控与优化实践百度前端性能监控与优化实践
百度前端性能监控与优化实践Welefen Lee
 
ASP.Net MVC Framework
ASP.Net MVC FrameworkASP.Net MVC Framework
ASP.Net MVC Framework國昭 張
 
第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践taobao.com
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am iTwinsen Liang
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践longhao
 
ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享國昭 張
 
Yog Framework
Yog FrameworkYog Framework
Yog Frameworkfansekey
 
前端调试工具,编码相关,性能相关
前端调试工具,编码相关,性能相关前端调试工具,编码相关,性能相关
前端调试工具,编码相关,性能相关jay li
 
Nginx使用和模块开发
Nginx使用和模块开发Nginx使用和模块开发
Nginx使用和模块开发qingpiao1983
 

What's hot (20)

Make your web faster
Make your web fasterMake your web faster
Make your web faster
 
Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案
 
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editor
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
 
移动搜索在慢网速下的优化
移动搜索在慢网速下的优化移动搜索在慢网速下的优化
移动搜索在慢网速下的优化
 
Html5
Html5Html5
Html5
 
Maven & mongo & sring
Maven & mongo & sringMaven & mongo & sring
Maven & mongo & sring
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editor
 
深入淺出Node.JS
深入淺出Node.JS深入淺出Node.JS
深入淺出Node.JS
 
2011新版首页总结 技术篇
2011新版首页总结 技术篇2011新版首页总结 技术篇
2011新版首页总结 技术篇
 
百度前端性能监控与优化实践
百度前端性能监控与优化实践百度前端性能监控与优化实践
百度前端性能监控与优化实践
 
ASP.Net MVC Framework
ASP.Net MVC FrameworkASP.Net MVC Framework
ASP.Net MVC Framework
 
第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践
 
CSS 語法教學
CSS 語法教學CSS 語法教學
CSS 語法教學
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am i
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践
 
ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享
 
Yog Framework
Yog FrameworkYog Framework
Yog Framework
 
前端调试工具,编码相关,性能相关
前端调试工具,编码相关,性能相关前端调试工具,编码相关,性能相关
前端调试工具,编码相关,性能相关
 
Nginx使用和模块开发
Nginx使用和模块开发Nginx使用和模块开发
Nginx使用和模块开发
 

Viewers also liked

Ndw celebration day_ppt_2010_2011
Ndw celebration day_ppt_2010_2011Ndw celebration day_ppt_2010_2011
Ndw celebration day_ppt_2010_2011hgould
 
New literacies ch 4 visual final
New literacies ch 4 visual finalNew literacies ch 4 visual final
New literacies ch 4 visual finalhgould
 
Prsentation eng 101
Prsentation  eng 101Prsentation  eng 101
Prsentation eng 101sopno100
 
Religia roma
Religia romaReligia roma
Religia romajvalara
 
Religioa egipte
Religioa egipteReligioa egipte
Religioa egiptejvalara
 
New literacies ch 4 visual version 2
New literacies ch 4 visual version 2New literacies ch 4 visual version 2
New literacies ch 4 visual version 2hgould
 
Horace v-la salle-summary-judgment[1]
Horace v-la salle-summary-judgment[1]Horace v-la salle-summary-judgment[1]
Horace v-la salle-summary-judgment[1]Nutriway
 

Viewers also liked (8)

Ndw celebration day_ppt_2010_2011
Ndw celebration day_ppt_2010_2011Ndw celebration day_ppt_2010_2011
Ndw celebration day_ppt_2010_2011
 
Question 4
Question 4Question 4
Question 4
 
New literacies ch 4 visual final
New literacies ch 4 visual finalNew literacies ch 4 visual final
New literacies ch 4 visual final
 
Prsentation eng 101
Prsentation  eng 101Prsentation  eng 101
Prsentation eng 101
 
Religia roma
Religia romaReligia roma
Religia roma
 
Religioa egipte
Religioa egipteReligioa egipte
Religioa egipte
 
New literacies ch 4 visual version 2
New literacies ch 4 visual version 2New literacies ch 4 visual version 2
New literacies ch 4 visual version 2
 
Horace v-la salle-summary-judgment[1]
Horace v-la salle-summary-judgment[1]Horace v-la salle-summary-judgment[1]
Horace v-la salle-summary-judgment[1]
 

Similar to 使用Big pipe提升浏览速度 wk_velocity

淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化丁 宇
 
新浪微博的BigPipe后端实现技术分享——11月26日淘宝aDev技术沙龙
新浪微博的BigPipe后端实现技术分享——11月26日淘宝aDev技术沙龙新浪微博的BigPipe后端实现技术分享——11月26日淘宝aDev技术沙龙
新浪微博的BigPipe后端实现技术分享——11月26日淘宝aDev技术沙龙slawdan
 
Big pipe backend2
Big pipe backend2Big pipe backend2
Big pipe backend2锐 张
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践丁 宇
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发leneli
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)Joseph Chiang
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
大型互联网站性能优化
大型互联网站性能优化大型互联网站性能优化
大型互联网站性能优化丁 宇
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.comHo Kim
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试tbmallf2e
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC
 
Qq.com前端架构实践与思考
Qq.com前端架构实践与思考Qq.com前端架构实践与思考
Qq.com前端架构实践与思考greengnn
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
淘宝搜索前端优化
淘宝搜索前端优化淘宝搜索前端优化
淘宝搜索前端优化Frank Xu
 
How to ASP.NET MVC4
How to ASP.NET MVC4How to ASP.NET MVC4
How to ASP.NET MVC4Daniel Chou
 
改善Programmer生活的sql技能
改善Programmer生活的sql技能改善Programmer生活的sql技能
改善Programmer生活的sql技能Rack Lin
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xBo-Yi Wu
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索Will Huang
 

Similar to 使用Big pipe提升浏览速度 wk_velocity (20)

淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化
 
新浪微博的BigPipe后端实现技术分享——11月26日淘宝aDev技术沙龙
新浪微博的BigPipe后端实现技术分享——11月26日淘宝aDev技术沙龙新浪微博的BigPipe后端实现技术分享——11月26日淘宝aDev技术沙龙
新浪微博的BigPipe后端实现技术分享——11月26日淘宝aDev技术沙龙
 
Big pipe backend2
Big pipe backend2Big pipe backend2
Big pipe backend2
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
大型互联网站性能优化
大型互联网站性能优化大型互联网站性能优化
大型互联网站性能优化
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.com
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸
 
Qq.com前端架构实践与思考
Qq.com前端架构实践与思考Qq.com前端架构实践与思考
Qq.com前端架构实践与思考
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
淘宝搜索前端优化
淘宝搜索前端优化淘宝搜索前端优化
淘宝搜索前端优化
 
How to ASP.NET MVC4
How to ASP.NET MVC4How to ASP.NET MVC4
How to ASP.NET MVC4
 
改善Programmer生活的sql技能
改善Programmer生活的sql技能改善Programmer生活的sql技能
改善Programmer生活的sql技能
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索
 

使用Big pipe提升浏览速度 wk_velocity