SlideShare a Scribd company logo
1 of 36
优化网站
optimize website




               2011.10.18 zhouchen33.com
介绍
• 对于网站来说,速度是第一位的。用户总是讨厌等待,这
  就像是去饭馆点菜,左等右等不上菜一样令人焦躁,是非
  常糟糕的用户体验。所以如何优化网站,值得深入研究。
• 本次分享介绍两种优化方式:
• 利用Http Caching
• 利用Bigpipe思路
Http Caching
• Http Caching 利用浏览器访问网站时,对图片,html等
  缓存在本地。再次访问该网站时,浏览器就不用再下载全
  部的文件。
• 优点 :
• 减少下载量,提高页面加载速度。
• 减小服务器负载
• 减少网络带宽。
Http Caching
• 先让我们复习下http请求和响应
Http Caching
• 缺陷:
• 当我们的网站发生了更新的时候,比如说Logo换了,浏
  览器本地仍保存着旧版本的Logo。
• 浏览器如何确定使用本地文件还是使用服务器上的新文
  件?
• 下面介绍按照Http Caching 协议的几种判断的方法。
Http Caching
• 1、用 Last-Modified 头:
• 服务器为了通知浏览器当前文件(图片,html,css,js)
  的版本,会发送一个最后修改时间的标签,例如:
• Last-modified: Fri, 16 Mar 2007 04:00:25 GMT
• 响应头Last-Modified在
  请求头If-Modified-Since
  后没有更新过就响应304
  通知浏览器利用
  本地缓存。
Http Caching
•   服务器端脚本可修改文件最后更改时间信息如:
•   php修改 Last-Modified头:
•   $time = time() - 60;
•   header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).'
    GMT');
•   php也可以获取请求头If-Modified-Since 判断来对比更改Last-
    Modified
•   $if_modified_since =
    isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ?
    stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) : FALSE;
Http Caching
•   2、用 Etag 头
•   通常情况下,通过修改时间来比较文件是可行的。但是在一些特殊情况,例如服务器的
    时钟发生了错误,服务器时钟进行修改,夏时制DST到来后服务器时间没有及时更新,
    这些都会引起通过修改时间比较文件版本的问题。
•   ETag可以用来解决这种问题。ETag是一个文件的唯一标志符。就像一个哈希或者指
    纹,每个文件都有一个单独的标志,只要这个文件发生了改变,这个标志就会发生变化。
    服务器返回ETag标签:
•   ETag: ead145f
•   响应头Etag与
    请求头If-None-Match
    是否一致,
•   如果一致就表示没有更新
•   就响应304
    通知浏览器利用
    本地缓存。
Http Caching
•   如同 Last-modified 一样,ETag 解决了文件版本比较的问题。
•   只不过 ETag 的级别比 Last-Modified 高一些。
Http Caching
•   3、用 Expires 头,过期时间
•   之前两点都有个缺陷那就是我们必须连接服务器。每次使用前都进行一次比较,这种方
    法很安全,但还不是最好的。我们可以使用 Expiration Date 来减少这种请求。
•   就像我们喝牛奶一样,每次喝之前都要检查一下牛奶是否安全。但是如果我们知道牛奶
    的过期时间,我们就可以在过期之前,直接使用而不用再送去检查。一旦超过了过期时
    间,我们再去买一份新的回来。服务器返回的时候,会带上这份数据的过期时间:
•   Expires: Tue, 20 Mar 2007 04:00:25 GMT

•   在过期之前,我们
•   就避免了和服务器之间的连接。
•   浏览器只需要自己判断
•   手中的材料是否过期
•   就可以了,
•   完全不需要增加服务器的负担。
Http Caching
• 让我们再比较一下Expires和Last-Modified
• 似乎Last-Modified比不上Expires,
• 因为虽然Last-Modified能够节省带宽,
• 但是还是要发一个HTTP请求,
• 而Expires却使得浏览器连HTTP请求都不用发,
• 那还要Last-Modified干什么?
• 理想状况的确是这样,不过当用户在浏览器里面按F5或者
  点击Refresh按钮的时候,就算对于有Expires,一样也会
  发一个HTTP请求出去,
• 所以,Last-Modified还是要用的,而且要和Expires一起
  用。
Http Caching
• 4、用 max-age 的 Cache-Control 头
• Expires的方法很好,但是我们每次都得算一个精确的时
  间。max-age 标签可以让我们更加容易的处理过期时间。
  我们只需要说,这份资料你只能用一个星期就可以了。

•   Max-age 使用秒来计量,下面是一些常用的单位:
•   1 days in seconds = 86400
•   1 week in seconds = 604800
•   1 month in seconds = 2629000
•   1 year in seconds = 31536000
Http Caching
•   额外的标签
•   缓存标签永远不会停止工作,但是有时候我们需要对已经缓存的内容
    进行一些控制。
•     Cache-control: public 表示缓存的版本可以被代理服务器或者
    其他中间服务器识别。
•     Cache-control: private 意味着这个文件对不同的用户是不同的。
    只有用户自己的浏览器能够进行缓存,公共的代理服务器不允许缓存。
•     Cache-control: no-cache 意味着文件的内容不应当被缓存。这
    在搜索或者翻页结果中非常有用,因为同样的URL,对应的内容会发
    生变化。

•   注意:有些标签只是在支持HTTP/1.1的浏览器上可用
Http Caching
•   小结:
•   四种方式:
•   Last-modified:
•   ETag:
•   Expires:
•   Cache-control: max-age=86400
•   Last-Modified 与 Etag 头还是要请求服务器的,只是仅返回 304 头,不
    返回内容。所以不管浏览器怎么Refresh ,304 都是有效的。但用 Ctrl+
    Refresh是全新请求的(这是浏览器行为,不发送缓存相关的头)。

•   Expires 头与 max-age 缓存是不需要请求服务器的,直接从本地缓存中取。
    但Refresh会忽视缓存(所以使用 httpwatch 之类的 http 协议监察工具
    时,不要Refresh误认为 Expires 和 max-age 是无效的)。
Http Caching
•   我们也可以直接改服务器配置文件来设置这些
•   比如Apache 上创建.htaccess:

•   #Create filter to match files you want to cache
•   <Files *.js>
•   Header add "Cache-Control" "max-age=604800"
•   </Files>

•   <Files *.js>
•   Header add "Expires" "Mon, 28 Jul 2014 23:30:00 GMT"
•   Header add "Cache-Control" "max-age=31536000"
•   </Files>
Http Caching
•   利用apache模块mod_expires:
•   <ifmodule mod_expires.c>
•   expiresactive on
•   #默认所有文件缓存时间设置为300秒
•   expiresdefault a300
•   </ifmodule>

•   mod_headers:
•   <ifmodule mod_headers.c>
•   # css, js, swf类的文件缓存一个星期
•   <filesmatch “.(css|js|swf)$”>
•   header set cache-control “max-age=604800″
•   </filesmatch>
•   </ifmodule>
Http Caching

•   nginx服务器可以结合squid控制http caching:
•   在server中增加
•   location ~ ^/(img|js|css)/ {
•   root /data3/Html;
•   expires 24h;
•   }
Http Caching
• php控制http caching:
• header('Cache-Control: max-age=86400,must-
  revalidate');
• header('Pragma:');
• header('Last-Modified: ' .gmdate('D, d M Y H:i:s') .
  ' GMT' );
• header('Expires: ' .gmdate ('D, d M Y H:i:s', time()
  + '86400' ). ' GMT');
Http Caching
• 这是PHP来给图片设置Http Caching的例子
Http Caching
•   简单应用实例,比如有以下部分:
•   index.html
•   css
•   js
•   image

• 我们可以不缓存index.html,html加载build01中的
  css,js,image,并缓存build01目录下的文件。
• 当css,js,image需要改变时,新建build02目录,
  index.html链接新目录的文件,以此类推。
Http Caching

• Http Caching 大概就这些,更多信息可以查看http协议
  中关于Caching的部分

• 参考:
• http://betterexplained.com/articles/how-to-
  optimize-your-site-with-http-caching/
• 等
Bigpipe
•   历史:
•   Facebook的网站速度做为最关键的公司任务之一。
•   在2009年,实现了Facebook网站速度提升两倍。
•   这项提升网站速度的技术,Facebook命名为
    BigPipe。
Bigpipe
•   国内同类技术:
•   人人网
•   并发布开源框架rose poral
•   http://code.google.com/p/paoding-rose/

• 新浪微博最新版v4
Bigpipe
• 什么是bigpipe?

• 举例:在饭馆点菜吃的时候,如果点了四个菜,厨师没有
  必要把四个菜一起炒好再上来。
• 微博3.0就是这种把所有菜都炒好再上桌的网页加载模式。
• 所以用户吃上菜的时候,已经是第5秒了。
• 现在新版微博的bigpipe网页加载模式,是炒好一个菜先
  一个菜,用户可以先吃着,厨师再炒第二个菜。
• 甚至可以几个菜并发同时炒。所以用户吃上第一口菜的时
  间可能是第1秒,比之前提前了很多。
Bigpipe




• 并行bigpipe实例:
Bigpipe
• 实例:
Bigpipe
Bigpipe
•   BigPipe与AJAX
•   Web2.0的重要特征是网页显示大量动态内容,即web2.0注重网页与用户的交互。其核心技术是
    AJAX,如今所有主流网站都或多或少使用AJAX。与AJAX类似,BigPipe 实现了分块儿的概念,使
    页面能够分步输出,即每次输出一部分网页内容。接下来讨论 BigPipe 与AJAX 的区别。

•   简单的说,BigPipe 比AJAX 有三个好处:
•   1. AJAX 的核心是XMLHttpRequest,客户端需要异步的向服务器端发送请求,然后将传送过来的
    内容动态添加到网页上。如此实现存在一些缺陷,即发送往返请求需要耗费时间,而 BigPipe 技术
    使浏览器并不需要发送XMLHttpRequest 请求,这样就节省时间损耗。

•   2. 使用AJAX时,浏览器和服务器的工作顺序执行。服务器必须等待浏览器的请求,这样就会造成
    服务器的空闲。浏览器工作时,服务器在等待,而服务器工作时,浏览器在等待,这也是一种性能
    的浪费。使用BigPipe,浏览器和服务器可以并行同时工作,服务器不需要等待浏览器的请求,而
    是一直处于加载页面内容的工作阶段,这就会使效率得到更大的提高。

•   3. 减少浏览器发送到请求。对一个5亿用户的网站来说,减少了使用AJAX额外带来的请求,会减少
    服务器的负载,同样会带来很大的性能提升。
Bigpipe
• BigPipe思想与原理
• 与AJAX相似,BigPipe使页面可以按区块渲染。
  但与AJAX不同的是,BigPipe不需要在页面载入
  后再通过XMLHttpRequest向服务器发起异步请
  求,而是(通过使用缓冲区)在页面载入过程中
  先输出页面布局,并在HTML中预留各个页面区块
  (Facebook称为Pagelet),加载完区块由
  Javascript进行DOM操作,对区块进行内容填
  充,也就是把内容赋给innerHTML。
Bigpipe
• BigPipe具体实现
Bigpipe
• 不同的语言IO中都有flush功能:

• php:ob_flush();flush()

• perl:STDOUT->autoflush(1);

• java:out.flush()

• python:sys.stout.flush()

• ruby:stdout.flush
Bigpipe
•   BigPipe正式环境中服务器端实现
•   1.java:后台逻辑如果使用java,可以使用java 的多线程机制去同
    时加载不同的pagelet 的内容。每个 pageLet 的内容交给单独的线
    程进行生成和处理,这样pageLet 的内容就做到并行处理,无需按照
    文档流顺序。每个线程完成后就把生成的页面内容返回给浏览器。

•   2.php:后台逻辑如果使用PHP。PHP 不支持多线程,无法像java
    使用多线程的机制来并发处理不同pagelet 的内容。虽然可以使用
    PHP curl,socket扩展完成功能,但都会遇到服务器阻塞问题。修改
    curl模块,添加回调功能。或生产子进程才可以实现并行处理。
Bigpipe
• 不同方式
Bigpipe
•   结论

•   经过上面的讨论,我们可以发现,使用BigPipe 技术优化页面可以有四个好处:
•   1. 减少页面的加载时间
•   2. 使页面分步输出,改善用户体验
•   3. 使页面结构化,提高可读性,更加便于维护
•   4. 每个pagelet 都是相互独立的,如果有一个pagelet 的内容不能加载,并不会影响
    其他的pagelet 的内容显示。

•   缺点:
•   1. 访问者是爬虫或者访问者浏览器禁止使用JS的情况
•   2 . 对SEO的影响
•   (解决:user-agent 判断客户端)
Bigpipe
• 参考:
• 从新浪微博改版谈网页重构——bigpipe中的页面
  构建优化.doc
• http://www.ibm.com/developerworks/cn/j
  ava/j-lo-bigpipe/index.html
• http://www.searchtb.com/2011/04/an-
  introduction-to-bigpipe.html
• 等
• 分享结束 Thanks

More Related Content

What's hot

jiaju.com首页前端优化一期报告
jiaju.com首页前端优化一期报告jiaju.com首页前端优化一期报告
jiaju.com首页前端优化一期报告zhangsuoyong
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生dennis zhuang
 
构建基于Lamp的中型网站架构
构建基于Lamp的中型网站架构构建基于Lamp的中型网站架构
构建基于Lamp的中型网站架构HonestQiao
 
移动搜索在慢网速下的优化
移动搜索在慢网速下的优化移动搜索在慢网速下的优化
移动搜索在慢网速下的优化Charlee Green
 
Modern php ch8 ch9 guide 導讀
Modern php ch8 ch9 guide 導讀Modern php ch8 ch9 guide 導讀
Modern php ch8 ch9 guide 導讀Chen Cheng-Wei
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践longhao
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践Jackson Tian
 
前端性能测试
前端性能测试前端性能测试
前端性能测试tbmallf2e
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化丁 宇
 
快!快!快! 互联网第一条军规
快!快!快! 互联网第一条军规快!快!快! 互联网第一条军规
快!快!快! 互联网第一条军规yangdj
 
台北市研習_LAMP_20140815
台北市研習_LAMP_20140815台北市研習_LAMP_20140815
台北市研習_LAMP_20140815fweng322
 
静态项目管理工具 - opm
静态项目管理工具 - opm静态项目管理工具 - opm
静态项目管理工具 - opmgoto100
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈Tim Y
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践丁 宇
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试tbmallf2e
 
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editortaobao.com
 
Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案美团技术团队
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
Http cache 的優化
Http cache 的優化Http cache 的優化
Http cache 的優化振揚 陳
 

What's hot (20)

jiaju.com首页前端优化一期报告
jiaju.com首页前端优化一期报告jiaju.com首页前端优化一期报告
jiaju.com首页前端优化一期报告
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生
 
构建基于Lamp的中型网站架构
构建基于Lamp的中型网站架构构建基于Lamp的中型网站架构
构建基于Lamp的中型网站架构
 
移动搜索在慢网速下的优化
移动搜索在慢网速下的优化移动搜索在慢网速下的优化
移动搜索在慢网速下的优化
 
Modern php ch8 ch9 guide 導讀
Modern php ch8 ch9 guide 導讀Modern php ch8 ch9 guide 導讀
Modern php ch8 ch9 guide 導讀
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
 
前端性能测试
前端性能测试前端性能测试
前端性能测试
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化淘宝前台系统性能分析与优化
淘宝前台系统性能分析与优化
 
快!快!快! 互联网第一条军规
快!快!快! 互联网第一条军规快!快!快! 互联网第一条军规
快!快!快! 互联网第一条军规
 
台北市研習_LAMP_20140815
台北市研習_LAMP_20140815台北市研習_LAMP_20140815
台北市研習_LAMP_20140815
 
静态项目管理工具 - opm
静态项目管理工具 - opm静态项目管理工具 - opm
静态项目管理工具 - opm
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试
 
编辑器设计U editor
编辑器设计U editor编辑器设计U editor
编辑器设计U editor
 
Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
Http cache 的優化
Http cache 的優化Http cache 的優化
Http cache 的優化
 

Viewers also liked

Mindfulness in the workplace
Mindfulness in the workplaceMindfulness in the workplace
Mindfulness in the workplaceJaemie Harley
 
Copy of &quot;and rarely just illness&quot; cornell focus questions
Copy of &quot;and rarely just illness&quot; cornell focus questionsCopy of &quot;and rarely just illness&quot; cornell focus questions
Copy of &quot;and rarely just illness&quot; cornell focus questionssydneypost
 
Adding a Second Twitter Account to your iPhone
Adding a Second Twitter Account to your iPhoneAdding a Second Twitter Account to your iPhone
Adding a Second Twitter Account to your iPhonecarich2
 
35 Posters Save the Arctic
35 Posters Save the Arctic35 Posters Save the Arctic
35 Posters Save the Arcticbadar masbadar
 
Delivering Rewards in an Instant World - Blackhawk Engagement Solutions
Delivering Rewards in an Instant World - Blackhawk Engagement SolutionsDelivering Rewards in an Instant World - Blackhawk Engagement Solutions
Delivering Rewards in an Instant World - Blackhawk Engagement SolutionsHawk Incentives
 
Taming of the shrew modern script
Taming of the shrew  modern scriptTaming of the shrew  modern script
Taming of the shrew modern scriptsydneypost
 
10 Ide Tata Ruang Apartemen Sempit
10 Ide Tata Ruang Apartemen Sempit10 Ide Tata Ruang Apartemen Sempit
10 Ide Tata Ruang Apartemen Sempitbadar masbadar
 
Transforming Gender Norms, Roles, and Power Dynamics to Reduce GBV: A Systema...
Transforming Gender Norms, Roles, and Power Dynamics to Reduce GBV: A Systema...Transforming Gender Norms, Roles, and Power Dynamics to Reduce GBV: A Systema...
Transforming Gender Norms, Roles, and Power Dynamics to Reduce GBV: A Systema...MEASURE Evaluation
 

Viewers also liked (13)

Ruchita Gangurde1
Ruchita Gangurde1Ruchita Gangurde1
Ruchita Gangurde1
 
Mindfulness in the workplace
Mindfulness in the workplaceMindfulness in the workplace
Mindfulness in the workplace
 
Hobby
HobbyHobby
Hobby
 
Copy of &quot;and rarely just illness&quot; cornell focus questions
Copy of &quot;and rarely just illness&quot; cornell focus questionsCopy of &quot;and rarely just illness&quot; cornell focus questions
Copy of &quot;and rarely just illness&quot; cornell focus questions
 
Advanced Excel 2015
Advanced Excel 2015Advanced Excel 2015
Advanced Excel 2015
 
Pkn
PknPkn
Pkn
 
Adding a Second Twitter Account to your iPhone
Adding a Second Twitter Account to your iPhoneAdding a Second Twitter Account to your iPhone
Adding a Second Twitter Account to your iPhone
 
35 Posters Save the Arctic
35 Posters Save the Arctic35 Posters Save the Arctic
35 Posters Save the Arctic
 
Delivering Rewards in an Instant World - Blackhawk Engagement Solutions
Delivering Rewards in an Instant World - Blackhawk Engagement SolutionsDelivering Rewards in an Instant World - Blackhawk Engagement Solutions
Delivering Rewards in an Instant World - Blackhawk Engagement Solutions
 
Taming of the shrew modern script
Taming of the shrew  modern scriptTaming of the shrew  modern script
Taming of the shrew modern script
 
10 Ide Tata Ruang Apartemen Sempit
10 Ide Tata Ruang Apartemen Sempit10 Ide Tata Ruang Apartemen Sempit
10 Ide Tata Ruang Apartemen Sempit
 
Transforming Gender Norms, Roles, and Power Dynamics to Reduce GBV: A Systema...
Transforming Gender Norms, Roles, and Power Dynamics to Reduce GBV: A Systema...Transforming Gender Norms, Roles, and Power Dynamics to Reduce GBV: A Systema...
Transforming Gender Norms, Roles, and Power Dynamics to Reduce GBV: A Systema...
 
Smartcities 2015 - GREENOV
Smartcities 2015 - GREENOVSmartcities 2015 - GREENOV
Smartcities 2015 - GREENOV
 

Similar to 20111018 zhouchen share

前端调试工具,编码相关,性能相关
前端调试工具,编码相关,性能相关前端调试工具,编码相关,性能相关
前端调试工具,编码相关,性能相关jay li
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am iTwinsen Liang
 
4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdfssuserd6c7621
 
Real-Time Web实时信息流推送
Real-Time Web实时信息流推送Real-Time Web实时信息流推送
Real-Time Web实时信息流推送yongboy
 
20081128 http caching_in_php
20081128 http caching_in_php20081128 http caching_in_php
20081128 http caching_in_phpHunter Wu
 
How to ASP.NET MVC4
How to ASP.NET MVC4How to ASP.NET MVC4
How to ASP.NET MVC4Daniel Chou
 
2011新版首页总结 技术篇
2011新版首页总结 技术篇2011新版首页总结 技术篇
2011新版首页总结 技术篇传贵 谢
 
Php study.20130110
Php study.20130110Php study.20130110
Php study.20130110bngoogle
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
客户端存储与计算
客户端存储与计算客户端存储与计算
客户端存储与计算xiaotao ning
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染Ailsa126
 
百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化tiantianli
 
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture][Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]思念 青青
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5 Tony Deng
 
Kvmopt osforce
Kvmopt osforceKvmopt osforce
Kvmopt osforcemeecheng
 
使用Bigpipe提升浏览速度
使用Bigpipe提升浏览速度使用Bigpipe提升浏览速度
使用Bigpipe提升浏览速度kumawu
 
使用Big pipe提升浏览速度v2
使用Big pipe提升浏览速度v2使用Big pipe提升浏览速度v2
使用Big pipe提升浏览速度v2kumawu
 

Similar to 20111018 zhouchen share (20)

前端调试工具,编码相关,性能相关
前端调试工具,编码相关,性能相关前端调试工具,编码相关,性能相关
前端调试工具,编码相关,性能相关
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am i
 
4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf
 
Real-Time Web实时信息流推送
Real-Time Web实时信息流推送Real-Time Web实时信息流推送
Real-Time Web实时信息流推送
 
20081128 http caching_in_php
20081128 http caching_in_php20081128 http caching_in_php
20081128 http caching_in_php
 
美团技术团队 - KVM性能优化
美团技术团队 - KVM性能优化美团技术团队 - KVM性能优化
美团技术团队 - KVM性能优化
 
How to ASP.NET MVC4
How to ASP.NET MVC4How to ASP.NET MVC4
How to ASP.NET MVC4
 
HTML 語法教學
HTML 語法教學HTML 語法教學
HTML 語法教學
 
2011新版首页总结 技术篇
2011新版首页总结 技术篇2011新版首页总结 技术篇
2011新版首页总结 技术篇
 
Php study.20130110
Php study.20130110Php study.20130110
Php study.20130110
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
客户端存储与计算
客户端存储与计算客户端存储与计算
客户端存储与计算
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
 
百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化
 
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture][Baidu web frontend_conference_2010]_[soso_frontend_architecture]
[Baidu web frontend_conference_2010]_[soso_frontend_architecture]
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5
 
微博架构Ppt
微博架构Ppt微博架构Ppt
微博架构Ppt
 
Kvmopt osforce
Kvmopt osforceKvmopt osforce
Kvmopt osforce
 
使用Bigpipe提升浏览速度
使用Bigpipe提升浏览速度使用Bigpipe提升浏览速度
使用Bigpipe提升浏览速度
 
使用Big pipe提升浏览速度v2
使用Big pipe提升浏览速度v2使用Big pipe提升浏览速度v2
使用Big pipe提升浏览速度v2
 

20111018 zhouchen share

  • 1. 优化网站 optimize website 2011.10.18 zhouchen33.com
  • 2. 介绍 • 对于网站来说,速度是第一位的。用户总是讨厌等待,这 就像是去饭馆点菜,左等右等不上菜一样令人焦躁,是非 常糟糕的用户体验。所以如何优化网站,值得深入研究。 • 本次分享介绍两种优化方式: • 利用Http Caching • 利用Bigpipe思路
  • 3. Http Caching • Http Caching 利用浏览器访问网站时,对图片,html等 缓存在本地。再次访问该网站时,浏览器就不用再下载全 部的文件。 • 优点 : • 减少下载量,提高页面加载速度。 • 减小服务器负载 • 减少网络带宽。
  • 5. Http Caching • 缺陷: • 当我们的网站发生了更新的时候,比如说Logo换了,浏 览器本地仍保存着旧版本的Logo。 • 浏览器如何确定使用本地文件还是使用服务器上的新文 件? • 下面介绍按照Http Caching 协议的几种判断的方法。
  • 6. Http Caching • 1、用 Last-Modified 头: • 服务器为了通知浏览器当前文件(图片,html,css,js) 的版本,会发送一个最后修改时间的标签,例如: • Last-modified: Fri, 16 Mar 2007 04:00:25 GMT • 响应头Last-Modified在 请求头If-Modified-Since 后没有更新过就响应304 通知浏览器利用 本地缓存。
  • 7. Http Caching • 服务器端脚本可修改文件最后更改时间信息如: • php修改 Last-Modified头: • $time = time() - 60; • header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT'); • php也可以获取请求头If-Modified-Since 判断来对比更改Last- Modified • $if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) : FALSE;
  • 8. Http Caching • 2、用 Etag 头 • 通常情况下,通过修改时间来比较文件是可行的。但是在一些特殊情况,例如服务器的 时钟发生了错误,服务器时钟进行修改,夏时制DST到来后服务器时间没有及时更新, 这些都会引起通过修改时间比较文件版本的问题。 • ETag可以用来解决这种问题。ETag是一个文件的唯一标志符。就像一个哈希或者指 纹,每个文件都有一个单独的标志,只要这个文件发生了改变,这个标志就会发生变化。 服务器返回ETag标签: • ETag: ead145f • 响应头Etag与 请求头If-None-Match 是否一致, • 如果一致就表示没有更新 • 就响应304 通知浏览器利用 本地缓存。
  • 9. Http Caching • 如同 Last-modified 一样,ETag 解决了文件版本比较的问题。 • 只不过 ETag 的级别比 Last-Modified 高一些。
  • 10. Http Caching • 3、用 Expires 头,过期时间 • 之前两点都有个缺陷那就是我们必须连接服务器。每次使用前都进行一次比较,这种方 法很安全,但还不是最好的。我们可以使用 Expiration Date 来减少这种请求。 • 就像我们喝牛奶一样,每次喝之前都要检查一下牛奶是否安全。但是如果我们知道牛奶 的过期时间,我们就可以在过期之前,直接使用而不用再送去检查。一旦超过了过期时 间,我们再去买一份新的回来。服务器返回的时候,会带上这份数据的过期时间: • Expires: Tue, 20 Mar 2007 04:00:25 GMT • 在过期之前,我们 • 就避免了和服务器之间的连接。 • 浏览器只需要自己判断 • 手中的材料是否过期 • 就可以了, • 完全不需要增加服务器的负担。
  • 11. Http Caching • 让我们再比较一下Expires和Last-Modified • 似乎Last-Modified比不上Expires, • 因为虽然Last-Modified能够节省带宽, • 但是还是要发一个HTTP请求, • 而Expires却使得浏览器连HTTP请求都不用发, • 那还要Last-Modified干什么? • 理想状况的确是这样,不过当用户在浏览器里面按F5或者 点击Refresh按钮的时候,就算对于有Expires,一样也会 发一个HTTP请求出去, • 所以,Last-Modified还是要用的,而且要和Expires一起 用。
  • 12. Http Caching • 4、用 max-age 的 Cache-Control 头 • Expires的方法很好,但是我们每次都得算一个精确的时 间。max-age 标签可以让我们更加容易的处理过期时间。 我们只需要说,这份资料你只能用一个星期就可以了。 • Max-age 使用秒来计量,下面是一些常用的单位: • 1 days in seconds = 86400 • 1 week in seconds = 604800 • 1 month in seconds = 2629000 • 1 year in seconds = 31536000
  • 13. Http Caching • 额外的标签 • 缓存标签永远不会停止工作,但是有时候我们需要对已经缓存的内容 进行一些控制。 • Cache-control: public 表示缓存的版本可以被代理服务器或者 其他中间服务器识别。 • Cache-control: private 意味着这个文件对不同的用户是不同的。 只有用户自己的浏览器能够进行缓存,公共的代理服务器不允许缓存。 • Cache-control: no-cache 意味着文件的内容不应当被缓存。这 在搜索或者翻页结果中非常有用,因为同样的URL,对应的内容会发 生变化。 • 注意:有些标签只是在支持HTTP/1.1的浏览器上可用
  • 14. Http Caching • 小结: • 四种方式: • Last-modified: • ETag: • Expires: • Cache-control: max-age=86400 • Last-Modified 与 Etag 头还是要请求服务器的,只是仅返回 304 头,不 返回内容。所以不管浏览器怎么Refresh ,304 都是有效的。但用 Ctrl+ Refresh是全新请求的(这是浏览器行为,不发送缓存相关的头)。 • Expires 头与 max-age 缓存是不需要请求服务器的,直接从本地缓存中取。 但Refresh会忽视缓存(所以使用 httpwatch 之类的 http 协议监察工具 时,不要Refresh误认为 Expires 和 max-age 是无效的)。
  • 15. Http Caching • 我们也可以直接改服务器配置文件来设置这些 • 比如Apache 上创建.htaccess: • #Create filter to match files you want to cache • <Files *.js> • Header add "Cache-Control" "max-age=604800" • </Files> • <Files *.js> • Header add "Expires" "Mon, 28 Jul 2014 23:30:00 GMT" • Header add "Cache-Control" "max-age=31536000" • </Files>
  • 16. Http Caching • 利用apache模块mod_expires: • <ifmodule mod_expires.c> • expiresactive on • #默认所有文件缓存时间设置为300秒 • expiresdefault a300 • </ifmodule> • mod_headers: • <ifmodule mod_headers.c> • # css, js, swf类的文件缓存一个星期 • <filesmatch “.(css|js|swf)$”> • header set cache-control “max-age=604800″ • </filesmatch> • </ifmodule>
  • 17. Http Caching • nginx服务器可以结合squid控制http caching: • 在server中增加 • location ~ ^/(img|js|css)/ { • root /data3/Html; • expires 24h; • }
  • 18. Http Caching • php控制http caching: • header('Cache-Control: max-age=86400,must- revalidate'); • header('Pragma:'); • header('Last-Modified: ' .gmdate('D, d M Y H:i:s') . ' GMT' ); • header('Expires: ' .gmdate ('D, d M Y H:i:s', time() + '86400' ). ' GMT');
  • 20. Http Caching • 简单应用实例,比如有以下部分: • index.html • css • js • image • 我们可以不缓存index.html,html加载build01中的 css,js,image,并缓存build01目录下的文件。 • 当css,js,image需要改变时,新建build02目录, index.html链接新目录的文件,以此类推。
  • 21. Http Caching • Http Caching 大概就这些,更多信息可以查看http协议 中关于Caching的部分 • 参考: • http://betterexplained.com/articles/how-to- optimize-your-site-with-http-caching/ • 等
  • 22. Bigpipe • 历史: • Facebook的网站速度做为最关键的公司任务之一。 • 在2009年,实现了Facebook网站速度提升两倍。 • 这项提升网站速度的技术,Facebook命名为 BigPipe。
  • 23. Bigpipe • 国内同类技术: • 人人网 • 并发布开源框架rose poral • http://code.google.com/p/paoding-rose/ • 新浪微博最新版v4
  • 24. Bigpipe • 什么是bigpipe? • 举例:在饭馆点菜吃的时候,如果点了四个菜,厨师没有 必要把四个菜一起炒好再上来。 • 微博3.0就是这种把所有菜都炒好再上桌的网页加载模式。 • 所以用户吃上菜的时候,已经是第5秒了。 • 现在新版微博的bigpipe网页加载模式,是炒好一个菜先 一个菜,用户可以先吃着,厨师再炒第二个菜。 • 甚至可以几个菜并发同时炒。所以用户吃上第一口菜的时 间可能是第1秒,比之前提前了很多。
  • 28. Bigpipe • BigPipe与AJAX • Web2.0的重要特征是网页显示大量动态内容,即web2.0注重网页与用户的交互。其核心技术是 AJAX,如今所有主流网站都或多或少使用AJAX。与AJAX类似,BigPipe 实现了分块儿的概念,使 页面能够分步输出,即每次输出一部分网页内容。接下来讨论 BigPipe 与AJAX 的区别。 • 简单的说,BigPipe 比AJAX 有三个好处: • 1. AJAX 的核心是XMLHttpRequest,客户端需要异步的向服务器端发送请求,然后将传送过来的 内容动态添加到网页上。如此实现存在一些缺陷,即发送往返请求需要耗费时间,而 BigPipe 技术 使浏览器并不需要发送XMLHttpRequest 请求,这样就节省时间损耗。 • 2. 使用AJAX时,浏览器和服务器的工作顺序执行。服务器必须等待浏览器的请求,这样就会造成 服务器的空闲。浏览器工作时,服务器在等待,而服务器工作时,浏览器在等待,这也是一种性能 的浪费。使用BigPipe,浏览器和服务器可以并行同时工作,服务器不需要等待浏览器的请求,而 是一直处于加载页面内容的工作阶段,这就会使效率得到更大的提高。 • 3. 减少浏览器发送到请求。对一个5亿用户的网站来说,减少了使用AJAX额外带来的请求,会减少 服务器的负载,同样会带来很大的性能提升。
  • 29. Bigpipe • BigPipe思想与原理 • 与AJAX相似,BigPipe使页面可以按区块渲染。 但与AJAX不同的是,BigPipe不需要在页面载入 后再通过XMLHttpRequest向服务器发起异步请 求,而是(通过使用缓冲区)在页面载入过程中 先输出页面布局,并在HTML中预留各个页面区块 (Facebook称为Pagelet),加载完区块由 Javascript进行DOM操作,对区块进行内容填 充,也就是把内容赋给innerHTML。
  • 31. Bigpipe • 不同的语言IO中都有flush功能: • php:ob_flush();flush() • perl:STDOUT->autoflush(1); • java:out.flush() • python:sys.stout.flush() • ruby:stdout.flush
  • 32. Bigpipe • BigPipe正式环境中服务器端实现 • 1.java:后台逻辑如果使用java,可以使用java 的多线程机制去同 时加载不同的pagelet 的内容。每个 pageLet 的内容交给单独的线 程进行生成和处理,这样pageLet 的内容就做到并行处理,无需按照 文档流顺序。每个线程完成后就把生成的页面内容返回给浏览器。 • 2.php:后台逻辑如果使用PHP。PHP 不支持多线程,无法像java 使用多线程的机制来并发处理不同pagelet 的内容。虽然可以使用 PHP curl,socket扩展完成功能,但都会遇到服务器阻塞问题。修改 curl模块,添加回调功能。或生产子进程才可以实现并行处理。
  • 34. Bigpipe • 结论 • 经过上面的讨论,我们可以发现,使用BigPipe 技术优化页面可以有四个好处: • 1. 减少页面的加载时间 • 2. 使页面分步输出,改善用户体验 • 3. 使页面结构化,提高可读性,更加便于维护 • 4. 每个pagelet 都是相互独立的,如果有一个pagelet 的内容不能加载,并不会影响 其他的pagelet 的内容显示。 • 缺点: • 1. 访问者是爬虫或者访问者浏览器禁止使用JS的情况 • 2 . 对SEO的影响 • (解决:user-agent 判断客户端)
  • 35. Bigpipe • 参考: • 从新浪微博改版谈网页重构——bigpipe中的页面 构建优化.doc • http://www.ibm.com/developerworks/cn/j ava/j-lo-bigpipe/index.html • http://www.searchtb.com/2011/04/an- introduction-to-bigpipe.html • 等