SlideShare una empresa de Scribd logo
1 de 67
Web前端性能优化最佳实践
陈芳洁
2012年8月31日
你知道网站慢的原因么?
1、服务器
2、客户端
1、减少服务器的响应时间
只有10%~20%的最终用户响应时间是花费在
从Web 服务器获取HTML 文档并传送到浏览
器中的。
我们能做什么?
80%~90%的最终用户响应时间是花费在下载页面的
CSS、JS、Image以及其他资源中。
2、减少客户端的响应时间
(2)如果对前端进行性能优化,效率提
升50%,则会使最终页面响应时间减少
40%~45%
(1)如果对后台业务逻辑进行优化,
效率提高了50%,但最终的页面响应时
间只减少了5%~10%
另外,前端的性能优化一般比业务逻辑的优化更加容
易。
3、减少最终用户响应时间的最佳方式
二、前端性能优化方法
 yahoo性能优化黄金法则
 合理安排资源的加载顺序
yahoo性能优化黄金法则35条
Minimize HTTP Requests
Use a Content Delivery Network
Add an Expires or a Cache-Control Header
Gzip Components
Put Stylesheets at the Top
Put Scripts at the Bottom
Avoid CSS Expressions
Make JavaScript and CSS External
Reduce DNS Lookups
Minify JavaScript and CSS
Avoid Redirects
Remove Duplicate Scripts
Configure ETags
Make Ajax Cacheable
Flush the Buffer Early
Use GET for AJAX Requests
Post-load Components
Preload Components
Reduce the Number of DOM Elements
Split Components Across Domains
Minimize the Number of iframes
No 404s
Reduce Cookie Size
Use Cookie-free Domains for Components
Minimize DOM Access
Develop Smart Event Handlers
Choose <link> over @import
Avoid Filters
Optimize Images
Optimize CSS Sprites
Don't Scale Images in HTML
Make favicon.ico Small and Cacheable
Keep Components under 25K
Pack Components into a Multipart Document
Avoid Empty Image src
http://developer.yahoo.com/performance/rules.html
性能提升最显著的法则:
1、给资源添加周期头(Add an Expires or a Cache-Control Header)
2、对资源启用gzip压缩(Gzip Components)
3、减少页面的HTTP请求( Minimize HTTP Requests )
4、使用CDN部署静态资源(Use a Content Delivery Network)
1、给资源添加周期头
(1)Cache-Control
控制缓存的失效日期
(2)Expires
控制缓存的失效日期,优先级比Cache-Control低
(3)Etag和If-None-Match
验证网页的有效性
(4)Last-Modified和If-Modified-Since
验证网页的有效性
(1)Cache-Control
Cache-Control:cache-directive,常用 cache-directive 值如下:
Cache-directive 说明
public 所有内容都将被缓存
private 内容只缓存到私有缓存中
no-cache 所有内容都不会被缓存
no-store
所有内容都不会被缓存到缓存或
Internet 临时文件中
must-revalidation/proxy-
revalidation
如果缓存的内容失效,请求必须发送
到服务器/代理以进行重新验证
max-age=n (n is numeric)
缓存的内容将在 n 秒后失效, 这个选项
只在HTTP 1.1可用, 并如果和Last-
Modified一起使用时, 优先级较高
Cache-directive 打开新窗口 原窗口Enter 刷新 单击 Back
public 取缓存 取缓存 发请求 取缓存
private 发请求
首次,发请求
此后,取缓存
发请求 取缓存
no-cache/no-store 发请求 发请求 发请求 发请求
must-revalidation/proxy-
revalidation
发请求
首次,发请求
此后,取缓存
发请求 取缓存
max-age=n (n is numeric) n 秒后,发请求 n 秒后,发请求 发请求 n 秒后,发请求
对 cache-directive 值的浏览器响应如下:
注:当点击浏览器上的刷新,客户端发送的请求中均是max-age=0,表示validate操
作,发送请求到服务器要求检查cache,再更新cache,一般得到的是304 Not
Modified,表示没变动。
(2)Expires
也可以通过http的meta设置expires和cache-control
<meta http-equiv="Cache-Control" content="max-age=7200" />
<meta http-equiv="Expires" content=" Tue, 22 May 2012 19:07:22 GMT "
/>
http1.0协议没有实现Cache-Control,而使用Pragma,如:
<meta http-equiv=“Pragma” content=“no-cache” />
注意访问某一静态资源时,使用时间戳作为参
数,导致无法使用浏览器的缓存,如:
http://t.sohu.com/t/swf/swfupload-
43.swf?t=1338341597975
。
第一次请求:响应头Etag
第二次请求(F5刷新):请求头If-None-Match
(3)Etag与If-None-Match
第一次请求:响应头Last-Modified
第二次请求(F5刷新):请求头If-Modified-Since
(4)Last-Modified与If-Modified-Since
2、启用Gzip压缩:
文件类型 压缩前 压缩后 减少了
html 113kb 23kb 80%
css 206kb 54kb 74%
js 764kb 260kb 64%
image 131kb 131kb 没变
微博首页资源启用Gzip压缩后的情况如下:
注意:除了text/html 、text/plain 、text/xml 、text/css、
application/x-javascript,其他资源都不能启用Gzip压缩,
特别是图片。
用于测试的html页面未压缩前为:122KB,经过IE、FireFox、
Chrome压缩后均为20.5KB,缩小了84%
3、减少页面的HTTP请求
你了解浏览器发起的
HTTP请求么?
浏览器发起的HTTP请求,有如下阶段:
(1)阻塞
受浏览器限制的最大并发连接数影响
(2)域名解析
(3)建立连接
(4)发送请求
(5)等待响应
(6)接收数据
为了能让用户尽快看到页面的目的,节省各个HTTP请求阻塞、域名
解析、建立连接、发送请求、等待响应这5步所消耗的时间,需要对
资源进行合并,减少HTTP请求,或者延迟发起请求。方法如下:
(1)合并JS
(2)减少Ajax请求
(3)合并背景图片
原则:
尽量减少图片的使用,对圆角阴影等效果用css3降级处理。
常规优化:
1. 减少连接数:合并相同类别的图片,并且尽量减少图片中的留
白。如icon、静态表情等
2. 压缩图片:针对png图片,上线前使用工具压缩(如:
PNGOUTWin)
3. 尽量减少滤镜的使用,针对IE6图片可使用PNG8替代PNG24。
特殊优化:
1. 按区域合并图片:对于同一区域(模块)的图片,改动可能性较
小,并且其他项目需要整体沿用的,可以将使用到的图片合并为
一张大图。如toolbar。
2. 按功能合并图片:如mini模态窗背景图。
3. 不能合并的图片:比如换肤时需要改变的图片,不能与其他图片
合并到一起。
效果:
合并图片共减少11个连接数,压缩图片30个,共减少15k
(4)预加载:
为了更有效地减少首页资源的请求时间,可以在前一页面预先
加载资源(js,css,图片),js和css只加载不执行。
比如:在登录页面加载首页主要的css和js,登录成功之后跳转
到首页,首页可以直接利用缓存中的css和js,而不需要额外的请
求。
尽管我们使用了种种办法减少浏览器发起的HTTP
请求数,在无法再减少请求的时候,我们又该如何
让浏览器更好的为我们服务?
了解常用的浏览器连接数情况
(1)IE
同一域名,IE6、IE7发起的20个图片请求情况:
http://stevesouders.com/cuzillion/
同一域名,IE8、IE9发起的20个图片请求情况:
http://stevesouders.com/cuzillion/
(2)FireFox
同一域名,FireFox 12 发起的20个图片请求情况:
http://stevesouders.com/cuzillion/
(3)Chrome
同一域名,Chrome 17 发起的20个图片请求情况:
http://stevesouders.com/cuzillion/
在资源个数无法再减少的情况下,我们对资源所属的域名进行划分,以
便达到最佳的性能。如并发连接数最少(仅为2个)的IE6,通过合理的
域名安排,就能达到如下的效果:
http://stevesouders.com/cuzillion/
注意:一个页面的域名数量控制在2个到4个之间,以免引起由于DNS查找带来的性
能影响。
4、使用CDN部署静态资源
使用CDN,部署静态资源(js,css,图片,flash等),用
户能够就近获取资源,大大加快页面显示的速度。
 合理安排资源的加载顺序
你希望网页最先满足你
的什么需求?
(1)页面尽快可用 (2)页面尽快展示
我希望……
我们需要做的事情有哪些?
(1)找出影响用户体验的因素
(2)根据因素确定改进方案并实施
令人费解的浏览器时间线的空白
(1)找出影响用户体验的因素
空白A:浏览器正在下载CSS并渲染页面
空白B:浏览器正在下载JS并执行
在处理CSS、JS的过程中,所有后续的资源一律停止下载。
内联样式
加载并执行js
html
head
body
内联样式
预加载js
执行js
html
head
body
外联样式表
加载并执行js
html
head
body
外联样式
预加载js
执行js
html
head
body
方案1
css-inline-js-body-end
方案2
css-inline-js-preload
方案3
css-external-js-body-end
方案4
css-external-js-preload
猜猜看,哪种方案可以让我们更快看到页面?
(2)根据因素确定改进方案并实施
监测发现,方案1( css-inline-js-body-end )首屏性能最佳,
方案3( css-external-js-body-end )次之。
对于微博首页来说,为了能让用户最快看到页面,我们把
处理页面交互的js搬到了最后。
在解决问题的过程中,我们发现:
1、<head>标签部分内联js位于外联css的后面,
会导致外联css阻塞其他所有资源(包括js资源)
的下载。
2、js在执行的过程中,浏览器会停止一切的下
载以及渲染。执行之前未下载完的资源除外。
3、为了能让js资源尽快加载并且最后执行,可采取创建Image或者
Object的对象方式先下载,需要执行时再创建<script>标签添加到
页面。
JS 和 CSS 在页面中的位置,会影响其他资源的加载,原因如下:
A、资源是否下载取决于JS的执行结果
如:document.write, JS可能会修改dom。在JS加载和执行完成前,后
续所有资源的下载有可能是没必要的。
B、JS 的执行依赖最新样式
如:var w = $(“#id”).width(), JS 代码在执行前,浏览器必须保证在此 JS
之前的所有CSS(无论外联还是内联)都已下载并解析完成。
C、最新浏览器存在prefetch 的优化
在现代浏览器中,如Chrome、FireFox,随着版本的提高,
对后续 JS 和 CSS 提前下载,而并不执行。
三、浏览器的差异
1、IE
2、FireFox
3、Chrome
1、IE
2、FireFox
3、Chrome
四、性能监测方法
1、性能指标
2、监测方法
1、性能指标
(1)首屏
(2)domload
(3)winload
(1)首屏
IE浏览器显示第一屏主页面的消耗时间。
首屏的定义以800X600像素尺寸为标准。从开始监测开始计时,到IE浏览
器页面显示高度达到600像素且此区域有内容显示之后的时间。
(2)domload
domload事件发生在dom加载完毕
A、DOMContentLoaded
针对非IE浏览器来说,页面(document)发生DOMContentLoaded事件
的时间
B、onreadystatechange
IE系统浏览器,页面(document)发生onreadystatechange事件,并且
监测document.readyState 的值为“complete”的时间。
(3)winload
页面资源下载完毕之后会触发
A、onload
针对非IE浏览器来说,页面(document)发生onload事件的时间
B、load
IE系统浏览器,页面(document)发生load事件的时间。
2、监测方法
(1)常用的开发者工具
(2)浏览器内置对象——performance
(3)第三方监测工具
(1)常用的开发者工具
A、IE
HttpWatch,IE8以上版本可以按F12调出浏览器附带的开发者工具
B、FireFox
安装FireFox插件Firebug
C、Chrome
按F12调出浏览器附带的开发者工具
D、 webpagetest.org
可从世界各地观察网站浏览的情况,包括资源下载瀑布图以及捕捉的视频
(2)浏览器内置对象——performance
http://www.w3.org/TR/navigation-timing/
(3)第三方监测工具
A、博睿
B、基调
需要进行长期监测任务时,可采用浏览器内置
对象(performance),以及第三方工具进行。
Q &A
优化是一项长期的艰巨的任务
谢谢!

Más contenido relacionado

Destacado

Trigonometria 1 21 31
Trigonometria 1 21 31Trigonometria 1 21 31
Trigonometria 1 21 31
guestaa7c2a7
 
Quienes Son Los Estudiantes De La Esc. Secundaria
Quienes Son Los Estudiantes De La Esc. SecundariaQuienes Son Los Estudiantes De La Esc. Secundaria
Quienes Son Los Estudiantes De La Esc. Secundaria
cebecinj
 
Management 2.0 Ficod
Management 2.0 FicodManagement 2.0 Ficod
Management 2.0 Ficod
guest34ef32
 
CARMONA Y LINARES
CARMONA Y LINARESCARMONA Y LINARES
CARMONA Y LINARES
guest11aa8a
 
Presentasion Numero Dos
Presentasion Numero DosPresentasion Numero Dos
Presentasion Numero Dos
Sam Davis
 
CV_Systems Development Manager_v1_exc. Contact Details
CV_Systems Development Manager_v1_exc. Contact DetailsCV_Systems Development Manager_v1_exc. Contact Details
CV_Systems Development Manager_v1_exc. Contact Details
Paul. Fisher
 
El Trabajo En El Aula
El Trabajo En El AulaEl Trabajo En El Aula
El Trabajo En El Aula
cebecinj
 

Destacado (20)

Objetivos
ObjetivosObjetivos
Objetivos
 
Los Salasakas
Los SalasakasLos Salasakas
Los Salasakas
 
presentacion de prueba
presentacion de pruebapresentacion de prueba
presentacion de prueba
 
Curso Iso27001
Curso Iso27001Curso Iso27001
Curso Iso27001
 
Jornal Marco 2009
Jornal Marco 2009Jornal Marco 2009
Jornal Marco 2009
 
El Magnetismo Y La Brujula
El Magnetismo Y La BrujulaEl Magnetismo Y La Brujula
El Magnetismo Y La Brujula
 
Tienda De Maridos
Tienda De MaridosTienda De Maridos
Tienda De Maridos
 
Ponencia148 1
Ponencia148 1Ponencia148 1
Ponencia148 1
 
PROYECTO PARTE II
PROYECTO PARTE IIPROYECTO PARTE II
PROYECTO PARTE II
 
Trigonometria 1 21 31
Trigonometria 1 21 31Trigonometria 1 21 31
Trigonometria 1 21 31
 
Minimizadores apl
Minimizadores aplMinimizadores apl
Minimizadores apl
 
Quienes Son Los Estudiantes De La Esc. Secundaria
Quienes Son Los Estudiantes De La Esc. SecundariaQuienes Son Los Estudiantes De La Esc. Secundaria
Quienes Son Los Estudiantes De La Esc. Secundaria
 
Red Local Kevin
Red Local KevinRed Local Kevin
Red Local Kevin
 
Management 2.0 Ficod
Management 2.0 FicodManagement 2.0 Ficod
Management 2.0 Ficod
 
CARMONA Y LINARES
CARMONA Y LINARESCARMONA Y LINARES
CARMONA Y LINARES
 
Presentasion Numero Dos
Presentasion Numero DosPresentasion Numero Dos
Presentasion Numero Dos
 
CV_Systems Development Manager_v1_exc. Contact Details
CV_Systems Development Manager_v1_exc. Contact DetailsCV_Systems Development Manager_v1_exc. Contact Details
CV_Systems Development Manager_v1_exc. Contact Details
 
Red Local Lopez
Red Local LopezRed Local Lopez
Red Local Lopez
 
Activitat2
Activitat2Activitat2
Activitat2
 
El Trabajo En El Aula
El Trabajo En El AulaEl Trabajo En El Aula
El Trabajo En El Aula
 

Similar a Web前端性能优化最佳实践

前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试
tbmallf2e
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践
longhao
 
前端性能测试
前端性能测试前端性能测试
前端性能测试
tbmallf2e
 
影响搜索引擎排名的因素
影响搜索引擎排名的因素影响搜索引擎排名的因素
影响搜索引擎排名的因素
YUCHENG HU
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
Kay Yan
 
网站性能优化(周桂华)
网站性能优化(周桂华)网站性能优化(周桂华)
网站性能优化(周桂华)
txppt
 
Re Introduce Web Development
Re Introduce Web DevelopmentRe Introduce Web Development
Re Introduce Web Development
finian lau
 
百度新首页性能优化
百度新首页性能优化百度新首页性能优化
百度新首页性能优化
Welefen Lee
 
腾讯大讲堂13 soso访问速度优化
腾讯大讲堂13 soso访问速度优化腾讯大讲堂13 soso访问速度优化
腾讯大讲堂13 soso访问速度优化
areyouok
 

Similar a Web前端性能优化最佳实践 (20)

前端性能优化和自动化
前端性能优化和自动化前端性能优化和自动化
前端性能优化和自动化
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试
 
腾讯大讲堂40 web类服务用户体验优化综述
腾讯大讲堂40 web类服务用户体验优化综述腾讯大讲堂40 web类服务用户体验优化综述
腾讯大讲堂40 web类服务用户体验优化综述
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践
 
前端性能测试
前端性能测试前端性能测试
前端性能测试
 
高性能网站建设
高性能网站建设高性能网站建设
高性能网站建设
 
[2008]网站重构 -who am i
[2008]网站重构 -who am i[2008]网站重构 -who am i
[2008]网站重构 -who am i
 
Show Me The Page - 介紹 Critical rendering path
Show Me The Page - 介紹 Critical rendering pathShow Me The Page - 介紹 Critical rendering path
Show Me The Page - 介紹 Critical rendering path
 
影响搜索引擎排名的因素
影响搜索引擎排名的因素影响搜索引擎排名的因素
影响搜索引擎排名的因素
 
价值中国网站开发、管理经验探讨、分享、交流
价值中国网站开发、管理经验探讨、分享、交流价值中国网站开发、管理经验探讨、分享、交流
价值中国网站开发、管理经验探讨、分享、交流
 
大规模数据处理
大规模数据处理大规模数据处理
大规模数据处理
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)
 
网站性能优化(周桂华)
网站性能优化(周桂华)网站性能优化(周桂华)
网站性能优化(周桂华)
 
Inside the browser
Inside the browserInside the browser
Inside the browser
 
Re Introduce Web Development
Re Introduce Web DevelopmentRe Introduce Web Development
Re Introduce Web Development
 
百度新首页性能优化
百度新首页性能优化百度新首页性能优化
百度新首页性能优化
 
Zh120226techparty velocity2011-review
Zh120226techparty velocity2011-reviewZh120226techparty velocity2011-review
Zh120226techparty velocity2011-review
 
腾讯大讲堂13 soso访问速度优化
腾讯大讲堂13 soso访问速度优化腾讯大讲堂13 soso访问速度优化
腾讯大讲堂13 soso访问速度优化
 
腾讯大讲堂13 soso访问速度优化
腾讯大讲堂13 soso访问速度优化腾讯大讲堂13 soso访问速度优化
腾讯大讲堂13 soso访问速度优化
 
理解Ajax性能
理解Ajax性能理解Ajax性能
理解Ajax性能
 

Web前端性能优化最佳实践