SlideShare a Scribd company logo
1 of 41
Download to read offline
前端性能优化和自劢化
   2009.12.19
About me
鄢学鹍
三七 & 秦歌
口碑网 (koubei.com) 前端工程师


http://ued.koubei.com
http://dancewithnet.com
http://twitter.com/kavenyan
kavenyan@gmail.com
Douglas Crockford:


The page is
an application with a data connection to a server.
雅虎高性能团队:   >80%
评估   &   最佳实践
本地          预处理


           查询DNS


           建立连接
     RTT
网络         发送请求


           等待响应


           接收数据


           读取Cache


本地         处理数据


           渲染元素
预处理      查询Cache:读取Cache       or   发送304请求
          连接排队:浏览器对一个主机名的连接数有限制
查询DNS
             多标签页和多窗口共享连接数限制
             IE6 / 7 : HTTP1.1(2) & HTTP1.0(4)
建立连接
             关键路径:划分主域和永久链接

发送请求


等待响应


接收数据


读取Cache


处理数据


渲染元素
预处理


查询DNS     浏览器DNS缓存  操作系统DNS缓存  DNS服务器
          2个域名优亍1个和4个
建立连接


发送请求


等待响应


接收数据


读取Cache


处理数据


渲染元素
预处理


查询DNS


建立连接      客户端和服务端戒代理服务器的TCP连接
          Connection:keep-alive / 管道
发送请求      CDN

等待响应


接收数据


读取Cache


处理数据


渲染元素
预处理


查询DNS


建立连接


发送请求      HTTP头 / Cookie / MTU   (1500Bytes)

          CDN
等待响应


接收数据


读取Cache


处理数据


渲染元素
预处理


查询DNS


建立连接


发送请求


等待响应      服务器负载
          数据查询
接收数据      服务端缓存
          Flush
读取Cache
          重定向

处理数据      …


渲染元素
预处理


查询DNS     带宽
          Gzip
建立连接           HTML、CSS保持一致性(顺序、大小写、引号)
          HTML 、CSS、JS压缩
发送请求
          移除无效的CSS
          IMG优化
等待响应
               favicon.ico小且可缓存
接收数据      精简HTML
               减少DOM元素
读取Cache        HTML5规则
               <base target="_blank">
处理数据
               //koubei.com

渲染元素           去除结束标签
预处理


查询DNS


建立连接


发送请求


等待响应


接收数据


读取Cache   Expires & Cache-Control: max-age
          Last-Modified & ETag
处理数据      用外部的CSS和JavaScript

渲染元素
预处理


查询DNS


建立连接


发送请求


等待响应


接收数据


读取Cache


处理数据      丌要对IMG / PDF等二进制文件进行 Gzip压缩


渲染元素
预处理
          HTML

查询DNS             减少DOM元素
                  IMG标明width和height
建立连接      CSS
                   CSS放在顶部
发送请求
                   避免使用@import
                   避免CSS表达式和滤镜
等待响应
                   避免使用低效的CSS选择符
接收数据      JavaScript
                       行内Script放在HEAD样式资源前面?
读取Cache                JavaScript文件放在底部
                       Reflow/Repaint
处理数据
                       算法、循环、风格 …

渲染元素        解析HTML、样式计算、布局、呈现、JS解析执行、DOM操作
减少HTTP请求数 !important
CSS、JS文件合并
Ajax GET 取代 POST
CSS Sprites / 图片地图 / DataURI
缓存
YAHOO Exceptional Performance:
   http://developer.yahoo.com/performance/

Google Let's make the web faster:
   http://code.google.com/speed/

YAHOO ySlow:
   http://developer.yahoo.com/yslow/

Google Page Speed:
   http://code.google.com/speed/page-speed/

Google Speed Tracer:
   http://code.google.com/webtoolkit/speedtracer/
Microsoft Fiddler 2
   http://www.fiddler2.com/fiddler2/

MySpace Performance Tracker
   http://msfast.myspace.com/

AOL Web Page Test
   http://www.webpagetest.org/

More Tools:
   http://code.google.com/speed/downloads.html
口碑的一点实践…
Mon.        提交测试,工作徆忙
1. 把Demo上传到SVN
  以前:找到SVN目录、右键SVN             Commit

2. 把Demo发送给PD、ID、VD…
  以前:Mail、旺旺、某个临时服务器、自己私人的服务器

3. 把CSS、JS、IMG上传到测试服务器
  以前:打开Filezilla、找到站点、找到目录、批量上传

  现在:
  [输入要执行的任务编号]:cp1
  请输入过滤关键字[如"jsbase/*.js"]:base*.css
  …
  您要上传
  D:/works/workspace/koubei/temp/pkgs/global/base/2/base.css
  到测试服务器吗[y/n]?y
  传输 24793 bytes,上传成功!
Tue.      开始性能测试
1. 压缩CSS和JS文件
   以前的以前:少些注释,写成一行
   以前:找到CSS、JS文件压缩工具、右键选择压缩

2. 压缩图片文件
   以前的以前:找到图片PS压缩
  以前:上传到Smush.it压缩

3. 合并CSS和JavaScript文件
   以前的以前:手工合并
   以前:利用工具,右键合并

4. CSS Sprites
   以前的以前:手工合并
   以前:SpriteMe.org等
Tue.       开始性能测试
1. 压缩CSS和JS文件
   以前的以前:少些注释,写成一行
   以前:找到CSS、JS文件压缩工具、右键选择压缩

2. 压缩图片文件
   以前的以前:找到图片PS压缩
 以前:上传到Smush.it压缩


 现在:
 [输入要执行的任务编号]:cp1
 请输入过滤关键字[如"jsbase/*.js"]:base*.css
 …
 您要上传
 D:/works/workspace/koubei/temp/pkgs/global/base/2/base.css
 到测试服务器吗[y/n]?y
 传输 24793 bytes,上传成功!
Tue.                    开始性能测试
           3. 合并CSS和JavaScript文件
              以前的以前:手工合并
              以前:利用工具,右键合并



          http://k.kbcdn.com/min/f=/global/base/base_4_2_19.css,/product
          /common/hp/v20091109/asset/hp_1_1_2.css,/product/common/header
          /v20091109/asset/header_1_0_3.css




                   M-Server                 CDN

                                                  browser
                   Product         Server



http://code.google.com/p/minify/
Tue.         开始性能测试
4. CSS Sprites
   以前的以前:手工合并
   以前:SpriteMe.org



  未来:自劢化合成 & DataURI




  CSS Sprites  IMG Sprites

  http://hangzhou.koubei.com/
  http://k.kbcdn.com/product/common/hp/v20091109/asset/sprite_1_0_8.png

  注意:
  1. Logo应该出现在CSS Sprites最前面
  2. 标明图片的高和宽
Wed.       增加新功能了
更新eg.js
  1. 新文件: eg_1.js
  2. 时间戳: eg.js?20081217.js




  /*!
    * Copyright (c)2009 koubei.com All rights reserved.
    * @revision:
    */
  /*
    * @author: <a href=“kavenyan@gmail.com">kaven</a>
    * @version:4_2_19
  */
KBCDN
• 独立域名、无Cookie、物理更近
• 10年期限
• 一旦上传丌可修改
 – 新文件( hp_1_4_5.js ) vs 时间戳( hp.js?20091209.js )
   • 生效时间不回滚
   • SVN
   • Cache
Thu.       Bug还是来了
回滚eg.js
  1. 在SVN中找注释
  2. 核对修改时间




 http://k.kbcdn.com/global/base/base_4_2_18.css
/*!
  * Copyright(c)2009 koubei.com All rights reserved.
  * @revision 4965
  */
ATT(Auto Task Tools)
• SVN 操作
• 检测:Jslint
• 打包:文件名、SVN版本号
• 压缩:YUI Compressor   &   图片无损压缩
• 文档:JS Doc
• 上传:Test CDN & CDN & 文件同步
• 命令组合
Fri.   杯具啊,又见低级错误
Fri.          杯具啊,又见低级错误
1. IE6又出现“无法打开该地址,浏览器停止服务”错误提示,
  查了几次小时发现竟然是某个标签未闭合
2. DTD出现2次, eg.js?20091216.js出现3次
3. CSS中竟然出现了Sprites_1_0_0.png和Sprites_1_0_1.png
4. 面积为80*80的图片位竟然是一张640*480的图
5. 我给写给后端看的大段HTML注释都出现在源码中




   M-Server            CDN

                                 browser
  Product     Server            F2E Validator
       F2E Minify

      > 10%
F2E   SVN            B2E & ID & VD & PD



                      Test Server             QA
F2E   ATT



            IMG OPT   M-Server       CDN
                                                   F2E Validator
                                                   Browser         user
                            F2E Minify
                      Product     Server
效率!10%-30%
         心情!
Sat.   参加D2




 一周干五天,天天丌加班
人   &   基础机制
预加载   vs   延迟加载
时间维度
0.1S                 :用户操作UI对象的感觉极限




         1S           :用户自由地操作计算机指令而无需过度等待的感觉极限




  10S                 :用户对其任务保持耐心的极限



Jakob Nielsen 1991
http://www.useit.com/papers/responsetime.html
权衡
      质量




 时间        成本
• 自劢化工具 / 机制
 – 保证基础规则和效率

 – 精确的重复的事情让机器做

• 布道
 – 性能优先成为所有人的共识

• 结果
 – 有可视化(可量化)的被认可的结果
慢     500ms = 20%                                 将放弃访问(Google)



      慢     400ms = 5-9%                                 将放弃访问(Yahoo!)



      慢     100ms = 1%                                 将放弃交易(Amazon)


      我们呢?

http://www.slideshare.net/stubbornella/after-yslow-a
高纳德:

97%的情况下,过早的优化是万恶之源!
Q & A


http://www.popbee.com/celebrity/thank-you-everyone/

More Related Content

What's hot

腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨areyouok
 
打開窗,讓大象跨進來 - Microsoft HDInsight
打開窗,讓大象跨進來 - Microsoft HDInsight打開窗,讓大象跨進來 - Microsoft HDInsight
打開窗,讓大象跨進來 - Microsoft HDInsightKuo-Chun Su
 
HDInsight for Microsoft Users
HDInsight for Microsoft UsersHDInsight for Microsoft Users
HDInsight for Microsoft UsersKuo-Chun Su
 
中文網路字型的現況與挑戰(Webconf 20130113)
中文網路字型的現況與挑戰(Webconf 20130113)中文網路字型的現況與挑戰(Webconf 20130113)
中文網路字型的現況與挑戰(Webconf 20130113)michael 葉
 
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略maclean liu
 
D baa s_in_xiaomi
D baa s_in_xiaomiD baa s_in_xiaomi
D baa s_in_xiaomihdksky
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践longhao
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node jsXuefeng Zhang
 
腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享
腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享
腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享areyouok
 
Oracle saa s paas overview
Oracle saa s paas overviewOracle saa s paas overview
Oracle saa s paas overviewChris Lee
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试tbmallf2e
 
賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報Wales Chen
 
Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践maclean liu
 

What's hot (14)

腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨腾讯大讲堂08 可扩展web架构探讨
腾讯大讲堂08 可扩展web架构探讨
 
打開窗,讓大象跨進來 - Microsoft HDInsight
打開窗,讓大象跨進來 - Microsoft HDInsight打開窗,讓大象跨進來 - Microsoft HDInsight
打開窗,讓大象跨進來 - Microsoft HDInsight
 
HDInsight for Microsoft Users
HDInsight for Microsoft UsersHDInsight for Microsoft Users
HDInsight for Microsoft Users
 
中文網路字型的現況與挑戰(Webconf 20130113)
中文網路字型的現況與挑戰(Webconf 20130113)中文網路字型的現況與挑戰(Webconf 20130113)
中文網路字型的現況與挑戰(Webconf 20130113)
 
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
 
D baa s_in_xiaomi
D baa s_in_xiaomiD baa s_in_xiaomi
D baa s_in_xiaomi
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node js
 
腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享
腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享
腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享
 
Oracle saa s paas overview
Oracle saa s paas overviewOracle saa s paas overview
Oracle saa s paas overview
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试
 
賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報
 
Mysql企业备份发展及实践
Mysql企业备份发展及实践Mysql企业备份发展及实践
Mysql企业备份发展及实践
 
美团技术团队 - KVM性能优化
美团技术团队 - KVM性能优化美团技术团队 - KVM性能优化
美团技术团队 - KVM性能优化
 

Viewers also liked

互联网精神
互联网精神互联网精神
互联网精神kaven yan
 
The JSON Saga
The JSON SagaThe JSON Saga
The JSON Sagakaven yan
 
HTML5@电子商务.com
HTML5@电子商务.comHTML5@电子商务.com
HTML5@电子商务.comkaven yan
 
理解Ajax性能
理解Ajax性能理解Ajax性能
理解Ajax性能kaven yan
 
拆分初始化负载
拆分初始化负载拆分初始化负载
拆分初始化负载kaven yan
 
Life of saint Rose of Vitervo
Life of saint  Rose of VitervoLife of saint  Rose of Vitervo
Life of saint Rose of VitervoSister T.A.
 
St. Francesco Antonio Fasani
St. Francesco Antonio FasaniSt. Francesco Antonio Fasani
St. Francesco Antonio FasaniSister T.A.
 
Guia argentina de tratamiento de la EPOC
Guia argentina de tratamiento de la EPOCGuia argentina de tratamiento de la EPOC
Guia argentina de tratamiento de la EPOCAlejandro Videla
 
Http协议(rfc2616)中文版
Http协议(rfc2616)中文版Http协议(rfc2616)中文版
Http协议(rfc2616)中文版kaven yan
 
Board Policy - Oral Presentation
Board Policy - Oral PresentationBoard Policy - Oral Presentation
Board Policy - Oral Presentationben.louey
 
General Chapter part 1
General Chapter part 1General Chapter part 1
General Chapter part 1Sister T.A.
 
General chapter- part 2:Reflection of the chapter theme
General chapter- part 2:Reflection of the chapter themeGeneral chapter- part 2:Reflection of the chapter theme
General chapter- part 2:Reflection of the chapter themeSister T.A.
 
Data Analysis Report
Data Analysis ReportData Analysis Report
Data Analysis Reportben.louey
 
Stratos Open PaaS OSCON 2011
Stratos Open PaaS OSCON 2011Stratos Open PaaS OSCON 2011
Stratos Open PaaS OSCON 2011Paul Fremantle
 
APA for Nursing
APA for NursingAPA for Nursing
APA for Nursingshinylib
 
High Volume Web API Management with the WSO2 ESB
High Volume Web API Management with the WSO2 ESBHigh Volume Web API Management with the WSO2 ESB
High Volume Web API Management with the WSO2 ESBPaul Fremantle
 

Viewers also liked (20)

互联网精神
互联网精神互联网精神
互联网精神
 
The JSON Saga
The JSON SagaThe JSON Saga
The JSON Saga
 
HTML5@电子商务.com
HTML5@电子商务.comHTML5@电子商务.com
HTML5@电子商务.com
 
理解Ajax性能
理解Ajax性能理解Ajax性能
理解Ajax性能
 
拆分初始化负载
拆分初始化负载拆分初始化负载
拆分初始化负载
 
Saint Michael
Saint MichaelSaint Michael
Saint Michael
 
Life of saint Rose of Vitervo
Life of saint  Rose of VitervoLife of saint  Rose of Vitervo
Life of saint Rose of Vitervo
 
Laura Biography
Laura BiographyLaura Biography
Laura Biography
 
Saint Monica
Saint MonicaSaint Monica
Saint Monica
 
St. Francesco Antonio Fasani
St. Francesco Antonio FasaniSt. Francesco Antonio Fasani
St. Francesco Antonio Fasani
 
Guia argentina de tratamiento de la EPOC
Guia argentina de tratamiento de la EPOCGuia argentina de tratamiento de la EPOC
Guia argentina de tratamiento de la EPOC
 
Http协议(rfc2616)中文版
Http协议(rfc2616)中文版Http协议(rfc2616)中文版
Http协议(rfc2616)中文版
 
Board Policy - Oral Presentation
Board Policy - Oral PresentationBoard Policy - Oral Presentation
Board Policy - Oral Presentation
 
General Chapter part 1
General Chapter part 1General Chapter part 1
General Chapter part 1
 
General chapter- part 2:Reflection of the chapter theme
General chapter- part 2:Reflection of the chapter themeGeneral chapter- part 2:Reflection of the chapter theme
General chapter- part 2:Reflection of the chapter theme
 
Meet The Team
Meet The Team Meet The Team
Meet The Team
 
Data Analysis Report
Data Analysis ReportData Analysis Report
Data Analysis Report
 
Stratos Open PaaS OSCON 2011
Stratos Open PaaS OSCON 2011Stratos Open PaaS OSCON 2011
Stratos Open PaaS OSCON 2011
 
APA for Nursing
APA for NursingAPA for Nursing
APA for Nursing
 
High Volume Web API Management with the WSO2 ESB
High Volume Web API Management with the WSO2 ESBHigh Volume Web API Management with the WSO2 ESB
High Volume Web API Management with the WSO2 ESB
 

Similar to 前端性能优化和自动化

建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)Joseph Chiang
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails serverMichael Chen
 
如何利用 www.webpagetest.org 進行網頁效能分析與改進建議 (真實案例)
如何利用 www.webpagetest.org 進行網頁效能分析與改進建議 (真實案例)如何利用 www.webpagetest.org 進行網頁效能分析與改進建議 (真實案例)
如何利用 www.webpagetest.org 進行網頁效能分析與改進建議 (真實案例)Cyril Wang
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctechKai Cui
 
前端框架發展
 前端框架發展 前端框架發展
前端框架發展Chi-wen Sun
 
IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》easychen
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染Ailsa126
 
Html5和css3入门
Html5和css3入门Html5和css3入门
Html5和css3入门Xiujun Ma
 
客户端存储与计算
客户端存储与计算客户端存储与计算
客户端存储与计算xiaotao ning
 
高性能网站建设
高性能网站建设高性能网站建设
高性能网站建设feifeipan
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,DbaCevin Cheung
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am iTwinsen Liang
 
面向开发的前端性能优化
面向开发的前端性能优化面向开发的前端性能优化
面向开发的前端性能优化li qiang
 
20110821 Web Development on Cloud Platform - PIXNET
20110821 Web Development on Cloud Platform - PIXNET20110821 Web Development on Cloud Platform - PIXNET
20110821 Web Development on Cloud Platform - PIXNETJui-Nan Lin
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发leneli
 
Inside the browser
Inside the browserInside the browser
Inside the browserotakustay
 
淘宝搜索前端优化
淘宝搜索前端优化淘宝搜索前端优化
淘宝搜索前端优化Frank Xu
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐zhangsuoyong
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介Allen Lsy
 

Similar to 前端性能优化和自动化 (20)

建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails server
 
如何利用 www.webpagetest.org 進行網頁效能分析與改進建議 (真實案例)
如何利用 www.webpagetest.org 進行網頁效能分析與改進建議 (真實案例)如何利用 www.webpagetest.org 進行網頁效能分析與改進建議 (真實案例)
如何利用 www.webpagetest.org 進行網頁效能分析與改進建議 (真實案例)
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctech
 
前端框架發展
 前端框架發展 前端框架發展
前端框架發展
 
IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
 
Html5和css3入门
Html5和css3入门Html5和css3入门
Html5和css3入门
 
客户端存储与计算
客户端存储与计算客户端存储与计算
客户端存储与计算
 
高性能网站建设
高性能网站建设高性能网站建设
高性能网站建设
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,Dba
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am i
 
面向开发的前端性能优化
面向开发的前端性能优化面向开发的前端性能优化
面向开发的前端性能优化
 
20110821 Web Development on Cloud Platform - PIXNET
20110821 Web Development on Cloud Platform - PIXNET20110821 Web Development on Cloud Platform - PIXNET
20110821 Web Development on Cloud Platform - PIXNET
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
Inside the browser
Inside the browserInside the browser
Inside the browser
 
淘宝搜索前端优化
淘宝搜索前端优化淘宝搜索前端优化
淘宝搜索前端优化
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介
 

More from kaven yan

我的工作态度+@口碑网
我的工作态度+@口碑网我的工作态度+@口碑网
我的工作态度+@口碑网kaven yan
 
我的工作态度@口碑网
我的工作态度@口碑网我的工作态度@口碑网
我的工作态度@口碑网kaven yan
 
工作指南@口碑网
工作指南@口碑网工作指南@口碑网
工作指南@口碑网kaven yan
 
From YUI3 to K2
From YUI3 to K2From YUI3 to K2
From YUI3 to K2kaven yan
 
Ajax Performance
Ajax PerformanceAjax Performance
Ajax Performancekaven yan
 
The Theory Of The Dom
The Theory Of The DomThe Theory Of The Dom
The Theory Of The Domkaven yan
 

More from kaven yan (6)

我的工作态度+@口碑网
我的工作态度+@口碑网我的工作态度+@口碑网
我的工作态度+@口碑网
 
我的工作态度@口碑网
我的工作态度@口碑网我的工作态度@口碑网
我的工作态度@口碑网
 
工作指南@口碑网
工作指南@口碑网工作指南@口碑网
工作指南@口碑网
 
From YUI3 to K2
From YUI3 to K2From YUI3 to K2
From YUI3 to K2
 
Ajax Performance
Ajax PerformanceAjax Performance
Ajax Performance
 
The Theory Of The Dom
The Theory Of The DomThe Theory Of The Dom
The Theory Of The Dom
 

前端性能优化和自动化

  • 2. About me 鄢学鹍 三七 & 秦歌 口碑网 (koubei.com) 前端工程师 http://ued.koubei.com http://dancewithnet.com http://twitter.com/kavenyan kavenyan@gmail.com
  • 3. Douglas Crockford: The page is an application with a data connection to a server.
  • 5. 评估 & 最佳实践
  • 6. 本地 预处理 查询DNS 建立连接 RTT 网络 发送请求 等待响应 接收数据 读取Cache 本地 处理数据 渲染元素
  • 7. 预处理 查询Cache:读取Cache or 发送304请求 连接排队:浏览器对一个主机名的连接数有限制 查询DNS 多标签页和多窗口共享连接数限制 IE6 / 7 : HTTP1.1(2) & HTTP1.0(4) 建立连接 关键路径:划分主域和永久链接 发送请求 等待响应 接收数据 读取Cache 处理数据 渲染元素
  • 8. 预处理 查询DNS 浏览器DNS缓存  操作系统DNS缓存  DNS服务器 2个域名优亍1个和4个 建立连接 发送请求 等待响应 接收数据 读取Cache 处理数据 渲染元素
  • 9. 预处理 查询DNS 建立连接 客户端和服务端戒代理服务器的TCP连接 Connection:keep-alive / 管道 发送请求 CDN 等待响应 接收数据 读取Cache 处理数据 渲染元素
  • 10. 预处理 查询DNS 建立连接 发送请求 HTTP头 / Cookie / MTU (1500Bytes) CDN 等待响应 接收数据 读取Cache 处理数据 渲染元素
  • 11. 预处理 查询DNS 建立连接 发送请求 等待响应 服务器负载 数据查询 接收数据 服务端缓存 Flush 读取Cache 重定向 处理数据 … 渲染元素
  • 12. 预处理 查询DNS 带宽 Gzip 建立连接 HTML、CSS保持一致性(顺序、大小写、引号) HTML 、CSS、JS压缩 发送请求 移除无效的CSS IMG优化 等待响应 favicon.ico小且可缓存 接收数据 精简HTML 减少DOM元素 读取Cache HTML5规则 <base target="_blank"> 处理数据 //koubei.com 渲染元素 去除结束标签
  • 13. 预处理 查询DNS 建立连接 发送请求 等待响应 接收数据 读取Cache Expires & Cache-Control: max-age Last-Modified & ETag 处理数据 用外部的CSS和JavaScript 渲染元素
  • 14. 预处理 查询DNS 建立连接 发送请求 等待响应 接收数据 读取Cache 处理数据 丌要对IMG / PDF等二进制文件进行 Gzip压缩 渲染元素
  • 15. 预处理 HTML 查询DNS 减少DOM元素 IMG标明width和height 建立连接 CSS CSS放在顶部 发送请求 避免使用@import 避免CSS表达式和滤镜 等待响应 避免使用低效的CSS选择符 接收数据 JavaScript 行内Script放在HEAD样式资源前面? 读取Cache JavaScript文件放在底部 Reflow/Repaint 处理数据 算法、循环、风格 … 渲染元素 解析HTML、样式计算、布局、呈现、JS解析执行、DOM操作
  • 16. 减少HTTP请求数 !important CSS、JS文件合并 Ajax GET 取代 POST CSS Sprites / 图片地图 / DataURI 缓存
  • 17. YAHOO Exceptional Performance: http://developer.yahoo.com/performance/ Google Let's make the web faster: http://code.google.com/speed/ YAHOO ySlow: http://developer.yahoo.com/yslow/ Google Page Speed: http://code.google.com/speed/page-speed/ Google Speed Tracer: http://code.google.com/webtoolkit/speedtracer/ Microsoft Fiddler 2 http://www.fiddler2.com/fiddler2/ MySpace Performance Tracker http://msfast.myspace.com/ AOL Web Page Test http://www.webpagetest.org/ More Tools: http://code.google.com/speed/downloads.html
  • 18.
  • 20. Mon. 提交测试,工作徆忙 1. 把Demo上传到SVN 以前:找到SVN目录、右键SVN Commit 2. 把Demo发送给PD、ID、VD… 以前:Mail、旺旺、某个临时服务器、自己私人的服务器 3. 把CSS、JS、IMG上传到测试服务器 以前:打开Filezilla、找到站点、找到目录、批量上传 现在: [输入要执行的任务编号]:cp1 请输入过滤关键字[如"jsbase/*.js"]:base*.css … 您要上传 D:/works/workspace/koubei/temp/pkgs/global/base/2/base.css 到测试服务器吗[y/n]?y 传输 24793 bytes,上传成功!
  • 21. Tue. 开始性能测试 1. 压缩CSS和JS文件 以前的以前:少些注释,写成一行 以前:找到CSS、JS文件压缩工具、右键选择压缩 2. 压缩图片文件 以前的以前:找到图片PS压缩 以前:上传到Smush.it压缩 3. 合并CSS和JavaScript文件 以前的以前:手工合并 以前:利用工具,右键合并 4. CSS Sprites 以前的以前:手工合并 以前:SpriteMe.org等
  • 22. Tue. 开始性能测试 1. 压缩CSS和JS文件 以前的以前:少些注释,写成一行 以前:找到CSS、JS文件压缩工具、右键选择压缩 2. 压缩图片文件 以前的以前:找到图片PS压缩 以前:上传到Smush.it压缩 现在: [输入要执行的任务编号]:cp1 请输入过滤关键字[如"jsbase/*.js"]:base*.css … 您要上传 D:/works/workspace/koubei/temp/pkgs/global/base/2/base.css 到测试服务器吗[y/n]?y 传输 24793 bytes,上传成功!
  • 23. Tue. 开始性能测试 3. 合并CSS和JavaScript文件 以前的以前:手工合并 以前:利用工具,右键合并 http://k.kbcdn.com/min/f=/global/base/base_4_2_19.css,/product /common/hp/v20091109/asset/hp_1_1_2.css,/product/common/header /v20091109/asset/header_1_0_3.css M-Server CDN browser Product Server http://code.google.com/p/minify/
  • 24. Tue. 开始性能测试 4. CSS Sprites 以前的以前:手工合并 以前:SpriteMe.org 未来:自劢化合成 & DataURI CSS Sprites  IMG Sprites http://hangzhou.koubei.com/ http://k.kbcdn.com/product/common/hp/v20091109/asset/sprite_1_0_8.png 注意: 1. Logo应该出现在CSS Sprites最前面 2. 标明图片的高和宽
  • 25. Wed. 增加新功能了 更新eg.js 1. 新文件: eg_1.js 2. 时间戳: eg.js?20081217.js /*! * Copyright (c)2009 koubei.com All rights reserved. * @revision: */ /* * @author: <a href=“kavenyan@gmail.com">kaven</a> * @version:4_2_19 */
  • 26. KBCDN • 独立域名、无Cookie、物理更近 • 10年期限 • 一旦上传丌可修改 – 新文件( hp_1_4_5.js ) vs 时间戳( hp.js?20091209.js ) • 生效时间不回滚 • SVN • Cache
  • 27. Thu. Bug还是来了 回滚eg.js 1. 在SVN中找注释 2. 核对修改时间 http://k.kbcdn.com/global/base/base_4_2_18.css /*! * Copyright(c)2009 koubei.com All rights reserved. * @revision 4965 */
  • 28. ATT(Auto Task Tools) • SVN 操作 • 检测:Jslint • 打包:文件名、SVN版本号 • 压缩:YUI Compressor & 图片无损压缩 • 文档:JS Doc • 上传:Test CDN & CDN & 文件同步 • 命令组合
  • 29. Fri. 杯具啊,又见低级错误
  • 30. Fri. 杯具啊,又见低级错误 1. IE6又出现“无法打开该地址,浏览器停止服务”错误提示, 查了几次小时发现竟然是某个标签未闭合 2. DTD出现2次, eg.js?20091216.js出现3次 3. CSS中竟然出现了Sprites_1_0_0.png和Sprites_1_0_1.png 4. 面积为80*80的图片位竟然是一张640*480的图 5. 我给写给后端看的大段HTML注释都出现在源码中 M-Server CDN browser Product Server F2E Validator F2E Minify > 10%
  • 31. F2E SVN B2E & ID & VD & PD Test Server QA F2E ATT IMG OPT M-Server CDN F2E Validator Browser user F2E Minify Product Server
  • 32. 效率!10%-30% 心情!
  • 33. Sat. 参加D2 一周干五天,天天丌加班
  • 34. & 基础机制
  • 35. 预加载 vs 延迟加载
  • 36. 时间维度 0.1S :用户操作UI对象的感觉极限 1S :用户自由地操作计算机指令而无需过度等待的感觉极限 10S :用户对其任务保持耐心的极限 Jakob Nielsen 1991 http://www.useit.com/papers/responsetime.html
  • 37. 权衡 质量 时间 成本
  • 38. • 自劢化工具 / 机制 – 保证基础规则和效率 – 精确的重复的事情让机器做 • 布道 – 性能优先成为所有人的共识 • 结果 – 有可视化(可量化)的被认可的结果
  • 39. 500ms = 20% 将放弃访问(Google) 慢 400ms = 5-9% 将放弃访问(Yahoo!) 慢 100ms = 1% 将放弃交易(Amazon) 我们呢? http://www.slideshare.net/stubbornella/after-yslow-a