SlideShare a Scribd company logo
1 of 43
淘宝搜索前端优化
                  文河




1.0 2011-1-5              1
About Me
• 文河(许阳寅, Frank Xu)
• 淘宝UED - 搜索 – 前端开发
• Contact
  – f2e.us
  – @yyfrankyy
  – yyfrankyy@gmail.com
• Focus on:
  – JavaScript
  – Frontend Performance
Agenda
• 规则与工具
• 淘宝搜索前端优化实践
规则
• YAHOO
  – Best Practices for Speeding Up Your
    Web Site
• Google
  – Web Performance Best Practices
• 80/20
YSlow
Both
                                                 via @souders
                             use CSS sprites
combine scripts              use a CDN
combine stylesheets          configure ETags
add an Expires header        use GET for Ajax requests
gzip responses               reduce # of DOM elements
put stylesheets at the top   no 404s
put scripts at the bottom    avoid image filters
avoid CSS expressions        optimize favicon
make JS and CSS external
reduce DNS lookups           Page Speed
minify JS and CSS            defer loading JS
avoid redirects              remove unused CSS
remove duplicate scripts     use efficient CSS selectors
make Ajax cacheable          optimize images
reduce cookie size           optimize order of CSS & JS
use cookie-free domains      shard domains
don't scale images           leverage proxy caching
规则乊外
• 为什么脚本要放在文档最后?
• 为什么要把所有文件合并?
• 为什么要避免CSS Expressions?
• ……
规则乊外




       via @kavenyan
工具
• 综合评价
 – YSlow/PageSpeed
 – WebPageTest
• 瀑布流
 – Firebug -> Network
 – HttpWatch
• 代码性能
 – dynaTrace Ajax Edition
实战 - Why Search?
• 一个页面
• N个模块自由组合
 –   ShortLinks
 –   Shortcuts
 –   Properties
 –   Categories
 –   Search List
 –   P4P(item/shop)
 –   ……
What can we do?
• 配置优化
• 代码优化
 – 精简代码(减少请求和传输量)
 – 提高代码执行性能
• 策略优化
 – 延迟加载
 – 预加载
实战 – 配置优化
• CDN
• Keep-alive
• Cache-Control
• Cookieless domain
• Gzip
•…
实战 – 精简HTML
• Why?
  – 减少传输时间(S/S和C/S的时间)
  – 减少应用服务器内存占用
  – 减少DOM节点(浏览器内存占用)
• How?
  – 压缩(去除空格)
  – 优化结构(优雅降级:圆角/阴影/渐变……)
  – 分段flush
实战 – 精简HTML
• 类目List压缩HTML
  – 服务器QPS减少30%
• Multi flush
  – First Byte
  – Bigpipe/Google Instant
  – 淘宝排行榜
                Html大小   DOM节点
   基屏           7.2k     1170
   全部加载         124.7k   13777
实战 – 精简CSS
• Why?
  – 需要第一个被加载
  – <head/>里的CSS阻塞HTML渲染
• How?
  – 压缩(YC)
  – 跟特定结构内聚(模块化)
  – 移除基屏非必需样式
  – 简化选择符复杂度
实战 – 精简CSS
• s.taobao.com
• search.china.alibaba.com
实战 – 精简图片
• Why?
  – 避免页面加载期间大面积空白
  – 加快“响应”速度
  – 大sprite耗内存
• How?
  – 理解图片(图片格式与设计那点事儿)
  – 使用CSS3+Filter(适当时候降级)
  – 背景图片增加相关背景色
实战 – 精简图片/降级
实战 – 精简JS
• Why?
  – 阻塞线程(页面停止下载和渲染)
• How?
  – 压缩(YC/CC)
  – 按需加载
initial payload and
                    execution             Functions Executed before
                           JavaScript               onload
   www.aol.com                324 K                  30%
   www.ebay.com               234 K                  34%
   www.facebook.com           553 K                  7%
   www.google.com/search       21 K                  ??%
   www.bing.com/search         10 K                  35%
   www.msn.com                152 K                  55%
   www.myspace.com            248 K                  29%
   en.wikipedia.org/wiki       99 K                  19%
   www.yahoo.com              381 K                  33%
   www.youtube.com            274 K                  16%
                              229 K avg              29% avg
via @souders
实战 – Module Loader
• Loading Script Without Blocking
• Loader
  – ControlJS
  – LabJS
  – YUI Loader
  – KISSY Loader
  –…
实战 – SRP优化
• 为下一页预加载
 – 客户端缓存



• 文档前发请求
 – 打开连接(youtube)
 – 提前获取重要信息(P4P/SPU)
实战 – 旧系统优化
• 让所有人知道你的优化
• 80/20,先改最痛的地方
• 数据驱劢
 – 优化结果由数据支撑
 – 关注业务数据变劢
• 优化沉淀
 – 性能分析数据/讨论结果
 – 优化的权衡过程
实战 – SRP优化
• 分析瓶颈,得到80/20中的80
• 记录优化前的数据
 – 请求数量/域名数量
 – 文件大小
 – DOM节点
 – 业务数据
实战 – SRP优化
实战 – SRP优化
• 瀑布流分析
 – 域名数(DNS)
 – 连接数(CDN-COMBO)
  Browser      HTTP/1.1   HTTP/1.0
  IE 6,7       2          4
  IE 8         6          6
  Firefox 2    2          8
  Firefox 3    6          6
  Safari 3,4   4          4
  Chrome 1,2   6          6
  Opera 9,10   4          4
实战 – SRP优化
• 瀑布流分析
 – 阻塞?
实战 – SRP优化
• 瀑布流分析
 – 请求太迟
实战 - SRP优化
    精简(minify)               延迟   预加载
旧   1. 减少DNS查询               ?    ?
系       1. 宝贝图片域名从8个缩减为4个
统       2. Sprite固定在几个域名内
优   2. 减少请求数
化       1. 合并,清理CSS/Sprite
        2. 合并,清理JS
    3. 调整请求位置
实战 – SRP优化
                                         第三方广告
               子产品    子功能(BTS)   触发功能
Search Core    产品搜     搜索历史      搜索提示     P4P
               同店购     搜索定制      搜索建议
 核心功能                                     B2B
               开放搜索    自定义筛选     新功能提示    TOP



                                          3rd
              Kissy core                 party

              Kissy seed
实战 – SRP优化
• 业务决定载入优先级
核心功能   子产品        子功能(BTS)    触发功能     第三方
合并     单独合并,QP决   根据BTS概率决定   外联,触发后   按第三方优先级确定
       定是否并行载入    是否并入核心功能    加载内容     载入方式
实战 - SRP优化
    精简(minify)               延迟               预加载
旧   1. 减少DNS查询               1.   JS放在最后      ?
系       1. 宝贝图片域名从8个缩减为4个    2.   对页面做无倾入兼容
统       2. Sprite固定在几个域名内    3.   按需加载BTS模块
优   2. 减少请求数                 4.   异步加载触发模块
化       1. 合并,清理CSS/Sprite   5.   异步加载第三方模块
        2. 合并,清理JS
    3. 调整请求位置
实战 – SRP优化
• 提前获取重要信息(P4P)
 – KISSY.getScript(‘${p4p_request}’);
实战 - SRP优化
  精简(minify)               延迟               预加载
旧 1. 减少DNS查询               1.   JS放在最后      1. 预加载静态资源
系     1. 宝贝图片域名从8个缩减为4个    2.   对页面做无倾入兼容   2. 预请求重要数据
统     2. Sprite固定在几个域名内    3.   异步加载触发模块
优 2. 减少请求数                 4.   按需加载BTS模块
化     1. 合并,清理CSS/Sprite
      2. 合并,清理JS
  3. 调整请求位置
实战 – 全新项目
• 把性能作为一个功能点进行设计
 – Performance as a feature
• 提前埋入监控数据
• 不要害怕使用新技术,但要谨慎测试
实战 – 全新项目
• 自劢化部署(bash+ant)
• http://f2e.us/slides/bangv3.html
实战 - 持续优化
• 让整个团队认可前端优化
• 小组成员达成共识,分工逐步优化
实战 - 持续优化
• 浏览器份额
实战 - 持续优化
• onDOMReady/onload
实战 - 持续优化
实战 – 持续优化
• 文件大小
What’s Next?
• 更多使用LocalStorage
• 全站multi flush
• 更详尽的性能统计/分析
 – boomerang
Resources
• http://stevesouders.com
• http://www.webperformancetoday.com/
• http://calendar.perfplanet.com/2010/
淘宝搜索前端优化

More Related Content

What's hot

百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化tiantianli
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践孙立
 
阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践drewz lin
 
曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731
曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731
曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731drewz lin
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构XiaoJun Hong
 
天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011Yiwei Ma
 
D baa s_in_xiaomi
D baa s_in_xiaomiD baa s_in_xiaomi
D baa s_in_xiaomihdksky
 
大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构drewz lin
 
Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题XiaoJun Hong
 
Web coding principle
Web coding principleWeb coding principle
Web coding principleZongYing Lyu
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列XiaoJun Hong
 
移动端Web开发性能优化实践
移动端Web开发性能优化实践移动端Web开发性能优化实践
移动端Web开发性能优化实践Mingel Zhang
 
准实时海量数据分析系统架构探究
准实时海量数据分析系统架构探究准实时海量数据分析系统架构探究
准实时海量数据分析系统架构探究Min Zhou
 
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)topgeek
 
Alice库构建
Alice库构建Alice库构建
Alice库构建Sofish Lin
 
新浪微博redis技术演化
新浪微博redis技术演化新浪微博redis技术演化
新浪微博redis技术演化XiaoJun Hong
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试tbmallf2e
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130Jinrong Ye
 

What's hot (20)

百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化百度前端技术交流会--搜搜前端架构演变与优化
百度前端技术交流会--搜搜前端架构演变与优化
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
 
阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践
 
曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731
曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731
曲琳 购物搜索引擎架构的变与不变——一淘网搜索技术分享0731
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构
 
天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011
 
D baa s_in_xiaomi
D baa s_in_xiaomiD baa s_in_xiaomi
D baa s_in_xiaomi
 
大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构
 
Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题
 
Web coding principle
Web coding principleWeb coding principle
Web coding principle
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列
 
移动端Web开发性能优化实践
移动端Web开发性能优化实践移动端Web开发性能优化实践
移动端Web开发性能优化实践
 
20110607 IPv6
20110607 IPv620110607 IPv6
20110607 IPv6
 
准实时海量数据分析系统架构探究
准实时海量数据分析系统架构探究准实时海量数据分析系统架构探究
准实时海量数据分析系统架构探究
 
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
 
CSS 語法教學
CSS 語法教學CSS 語法教學
CSS 語法教學
 
Alice库构建
Alice库构建Alice库构建
Alice库构建
 
新浪微博redis技术演化
新浪微博redis技术演化新浪微博redis技术演化
新浪微博redis技术演化
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130
 

Similar to 淘宝搜索前端优化

美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
前端性能测试
前端性能测试前端性能测试
前端性能测试tbmallf2e
 
前端性能优化和自动化
前端性能优化和自动化前端性能优化和自动化
前端性能优化和自动化kaven yan
 
赵泽欣 - 淘宝网前端应用与发展
赵泽欣 - 淘宝网前端应用与发展赵泽欣 - 淘宝网前端应用与发展
赵泽欣 - 淘宝网前端应用与发展d0nn9n
 
2011新版首页总结 技术篇
2011新版首页总结 技术篇2011新版首页总结 技术篇
2011新版首页总结 技术篇传贵 谢
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocity使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocitykumawu
 
排行榜V3项目总结
排行榜V3项目总结排行榜V3项目总结
排行榜V3项目总结Frank Xu
 
性能优化
性能优化性能优化
性能优化Lu Wei
 
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)George Ang
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染Ailsa126
 
淘宝双11双12案例分享
淘宝双11双12案例分享淘宝双11双12案例分享
淘宝双11双12案例分享vanadies10
 
Qq.com前端架构实践与思考
Qq.com前端架构实践与思考Qq.com前端架构实践与思考
Qq.com前端架构实践与思考greengnn
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)Joseph Chiang
 
淘宝网前端应用与发展
淘宝网前端应用与发展淘宝网前端应用与发展
淘宝网前端应用与发展taobao.com
 
改善Programmer生活的sql技能
改善Programmer生活的sql技能改善Programmer生活的sql技能
改善Programmer生活的sql技能Rack Lin
 
2015-05-20 製造業生產歷程全方位整合查詢與探勘的規劃心法
2015-05-20 製造業生產歷程全方位整合查詢與探勘的規劃心法2015-05-20 製造業生產歷程全方位整合查詢與探勘的規劃心法
2015-05-20 製造業生產歷程全方位整合查詢與探勘的規劃心法Jazz Yao-Tsung Wang
 
使用Big pipe提升浏览速度v2
使用Big pipe提升浏览速度v2使用Big pipe提升浏览速度v2
使用Big pipe提升浏览速度v2kumawu
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京Joseph Chiang
 

Similar to 淘宝搜索前端优化 (20)

美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
前端性能测试
前端性能测试前端性能测试
前端性能测试
 
前端性能优化和自动化
前端性能优化和自动化前端性能优化和自动化
前端性能优化和自动化
 
赵泽欣 - 淘宝网前端应用与发展
赵泽欣 - 淘宝网前端应用与发展赵泽欣 - 淘宝网前端应用与发展
赵泽欣 - 淘宝网前端应用与发展
 
2011新版首页总结 技术篇
2011新版首页总结 技术篇2011新版首页总结 技术篇
2011新版首页总结 技术篇
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocity使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocity
 
排行榜V3项目总结
排行榜V3项目总结排行榜V3项目总结
排行榜V3项目总结
 
性能优化
性能优化性能优化
性能优化
 
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
腾讯大讲堂17 性能优化不是仅局限于后台(qzone)
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
 
淘宝双11双12案例分享
淘宝双11双12案例分享淘宝双11双12案例分享
淘宝双11双12案例分享
 
Qq.com前端架构实践与思考
Qq.com前端架构实践与思考Qq.com前端架构实践与思考
Qq.com前端架构实践与思考
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)
 
美团技术团队 - KVM性能优化
美团技术团队 - KVM性能优化美团技术团队 - KVM性能优化
美团技术团队 - KVM性能优化
 
淘宝网前端应用与发展
淘宝网前端应用与发展淘宝网前端应用与发展
淘宝网前端应用与发展
 
改善Programmer生活的sql技能
改善Programmer生活的sql技能改善Programmer生活的sql技能
改善Programmer生活的sql技能
 
2015-05-20 製造業生產歷程全方位整合查詢與探勘的規劃心法
2015-05-20 製造業生產歷程全方位整合查詢與探勘的規劃心法2015-05-20 製造業生產歷程全方位整合查詢與探勘的規劃心法
2015-05-20 製造業生產歷程全方位整合查詢與探勘的規劃心法
 
使用Big pipe提升浏览速度v2
使用Big pipe提升浏览速度v2使用Big pipe提升浏览速度v2
使用Big pipe提升浏览速度v2
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京
 

More from Frank Xu

FtnApp 的缩略图实践
FtnApp 的缩略图实践FtnApp 的缩略图实践
FtnApp 的缩略图实践Frank Xu
 
淘宝交易平台前端重构
淘宝交易平台前端重构淘宝交易平台前端重构
淘宝交易平台前端重构Frank Xu
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统Frank Xu
 
JsDoc的使用
JsDoc的使用JsDoc的使用
JsDoc的使用Frank Xu
 
Web Developing In Search
Web Developing In SearchWeb Developing In Search
Web Developing In SearchFrank Xu
 

More from Frank Xu (6)

Watcher
WatcherWatcher
Watcher
 
FtnApp 的缩略图实践
FtnApp 的缩略图实践FtnApp 的缩略图实践
FtnApp 的缩略图实践
 
淘宝交易平台前端重构
淘宝交易平台前端重构淘宝交易平台前端重构
淘宝交易平台前端重构
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
 
JsDoc的使用
JsDoc的使用JsDoc的使用
JsDoc的使用
 
Web Developing In Search
Web Developing In SearchWeb Developing In Search
Web Developing In Search
 

淘宝搜索前端优化

  • 1. 淘宝搜索前端优化 文河 1.0 2011-1-5 1
  • 2. About Me • 文河(许阳寅, Frank Xu) • 淘宝UED - 搜索 – 前端开发 • Contact – f2e.us – @yyfrankyy – yyfrankyy@gmail.com • Focus on: – JavaScript – Frontend Performance
  • 4. 规则 • YAHOO – Best Practices for Speeding Up Your Web Site • Google – Web Performance Best Practices • 80/20
  • 5. YSlow Both via @souders use CSS sprites combine scripts use a CDN combine stylesheets configure ETags add an Expires header use GET for Ajax requests gzip responses reduce # of DOM elements put stylesheets at the top no 404s put scripts at the bottom avoid image filters avoid CSS expressions optimize favicon make JS and CSS external reduce DNS lookups Page Speed minify JS and CSS defer loading JS avoid redirects remove unused CSS remove duplicate scripts use efficient CSS selectors make Ajax cacheable optimize images reduce cookie size optimize order of CSS & JS use cookie-free domains shard domains don't scale images leverage proxy caching
  • 7. 规则乊外 via @kavenyan
  • 8. 工具 • 综合评价 – YSlow/PageSpeed – WebPageTest • 瀑布流 – Firebug -> Network – HttpWatch • 代码性能 – dynaTrace Ajax Edition
  • 9. 实战 - Why Search? • 一个页面 • N个模块自由组合 – ShortLinks – Shortcuts – Properties – Categories – Search List – P4P(item/shop) – ……
  • 10. What can we do? • 配置优化 • 代码优化 – 精简代码(减少请求和传输量) – 提高代码执行性能 • 策略优化 – 延迟加载 – 预加载
  • 11. 实战 – 配置优化 • CDN • Keep-alive • Cache-Control • Cookieless domain • Gzip •…
  • 12. 实战 – 精简HTML • Why? – 减少传输时间(S/S和C/S的时间) – 减少应用服务器内存占用 – 减少DOM节点(浏览器内存占用) • How? – 压缩(去除空格) – 优化结构(优雅降级:圆角/阴影/渐变……) – 分段flush
  • 13. 实战 – 精简HTML • 类目List压缩HTML – 服务器QPS减少30% • Multi flush – First Byte – Bigpipe/Google Instant – 淘宝排行榜 Html大小 DOM节点 基屏 7.2k 1170 全部加载 124.7k 13777
  • 14. 实战 – 精简CSS • Why? – 需要第一个被加载 – <head/>里的CSS阻塞HTML渲染 • How? – 压缩(YC) – 跟特定结构内聚(模块化) – 移除基屏非必需样式 – 简化选择符复杂度
  • 15. 实战 – 精简CSS • s.taobao.com • search.china.alibaba.com
  • 16. 实战 – 精简图片 • Why? – 避免页面加载期间大面积空白 – 加快“响应”速度 – 大sprite耗内存 • How? – 理解图片(图片格式与设计那点事儿) – 使用CSS3+Filter(适当时候降级) – 背景图片增加相关背景色
  • 18. 实战 – 精简JS • Why? – 阻塞线程(页面停止下载和渲染) • How? – 压缩(YC/CC) – 按需加载
  • 19. initial payload and execution Functions Executed before JavaScript onload www.aol.com 324 K 30% www.ebay.com 234 K 34% www.facebook.com 553 K 7% www.google.com/search 21 K ??% www.bing.com/search 10 K 35% www.msn.com 152 K 55% www.myspace.com 248 K 29% en.wikipedia.org/wiki 99 K 19% www.yahoo.com 381 K 33% www.youtube.com 274 K 16% 229 K avg 29% avg via @souders
  • 20. 实战 – Module Loader • Loading Script Without Blocking • Loader – ControlJS – LabJS – YUI Loader – KISSY Loader –…
  • 21. 实战 – SRP优化 • 为下一页预加载 – 客户端缓存 • 文档前发请求 – 打开连接(youtube) – 提前获取重要信息(P4P/SPU)
  • 22. 实战 – 旧系统优化 • 让所有人知道你的优化 • 80/20,先改最痛的地方 • 数据驱劢 – 优化结果由数据支撑 – 关注业务数据变劢 • 优化沉淀 – 性能分析数据/讨论结果 – 优化的权衡过程
  • 23. 实战 – SRP优化 • 分析瓶颈,得到80/20中的80 • 记录优化前的数据 – 请求数量/域名数量 – 文件大小 – DOM节点 – 业务数据
  • 25. 实战 – SRP优化 • 瀑布流分析 – 域名数(DNS) – 连接数(CDN-COMBO) Browser HTTP/1.1 HTTP/1.0 IE 6,7 2 4 IE 8 6 6 Firefox 2 2 8 Firefox 3 6 6 Safari 3,4 4 4 Chrome 1,2 6 6 Opera 9,10 4 4
  • 26. 实战 – SRP优化 • 瀑布流分析 – 阻塞?
  • 27. 实战 – SRP优化 • 瀑布流分析 – 请求太迟
  • 28. 实战 - SRP优化 精简(minify) 延迟 预加载 旧 1. 减少DNS查询 ? ? 系 1. 宝贝图片域名从8个缩减为4个 统 2. Sprite固定在几个域名内 优 2. 减少请求数 化 1. 合并,清理CSS/Sprite 2. 合并,清理JS 3. 调整请求位置
  • 29. 实战 – SRP优化 第三方广告 子产品 子功能(BTS) 触发功能 Search Core 产品搜 搜索历史 搜索提示 P4P 同店购 搜索定制 搜索建议 核心功能 B2B 开放搜索 自定义筛选 新功能提示 TOP 3rd Kissy core party Kissy seed
  • 30. 实战 – SRP优化 • 业务决定载入优先级 核心功能 子产品 子功能(BTS) 触发功能 第三方 合并 单独合并,QP决 根据BTS概率决定 外联,触发后 按第三方优先级确定 定是否并行载入 是否并入核心功能 加载内容 载入方式
  • 31. 实战 - SRP优化 精简(minify) 延迟 预加载 旧 1. 减少DNS查询 1. JS放在最后 ? 系 1. 宝贝图片域名从8个缩减为4个 2. 对页面做无倾入兼容 统 2. Sprite固定在几个域名内 3. 按需加载BTS模块 优 2. 减少请求数 4. 异步加载触发模块 化 1. 合并,清理CSS/Sprite 5. 异步加载第三方模块 2. 合并,清理JS 3. 调整请求位置
  • 32. 实战 – SRP优化 • 提前获取重要信息(P4P) – KISSY.getScript(‘${p4p_request}’);
  • 33. 实战 - SRP优化 精简(minify) 延迟 预加载 旧 1. 减少DNS查询 1. JS放在最后 1. 预加载静态资源 系 1. 宝贝图片域名从8个缩减为4个 2. 对页面做无倾入兼容 2. 预请求重要数据 统 2. Sprite固定在几个域名内 3. 异步加载触发模块 优 2. 减少请求数 4. 按需加载BTS模块 化 1. 合并,清理CSS/Sprite 2. 合并,清理JS 3. 调整请求位置
  • 34. 实战 – 全新项目 • 把性能作为一个功能点进行设计 – Performance as a feature • 提前埋入监控数据 • 不要害怕使用新技术,但要谨慎测试
  • 35. 实战 – 全新项目 • 自劢化部署(bash+ant) • http://f2e.us/slides/bangv3.html
  • 36. 实战 - 持续优化 • 让整个团队认可前端优化 • 小组成员达成共识,分工逐步优化
  • 37. 实战 - 持续优化 • 浏览器份额
  • 38. 实战 - 持续优化 • onDOMReady/onload
  • 41. What’s Next? • 更多使用LocalStorage • 全站multi flush • 更详尽的性能统计/分析 – boomerang

Editor's Notes

  1. Data source: Steve Souders, updated April 2010