SlideShare a Scribd company logo
1 of 28
CSS 性能优化 ——  林小志  linxz
选择符的性能 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],1000 次 多层嵌套
div div div p.className a.className div div div p.pclass 0001  a.class 0001  { background: #CFD; } … div div div p.pclass 1000  a.class 1000  { background: #CFD; }
div div div p a.className div div div p a.class 0001  { background: #CFD; } … div div div p a.class 1000  { background: #CFD; }
div div div p * div div div p * { background: #CFD; }
div#outerdiv div div p.className a.className div#outerdiv div div p.pclass 0001  a.class 0001  { background: #CFD; } … div#outerdiv div div p.pclass 1000  a.class 1000  { background: #CFD; }
div#outerdiv div div p * div#outerdiv div div p * { background: #CFD; }
a a { background: #CFD; }
className .class 0001  { background: #CFD; } … .class 1000  { background: #CFD; }
选择符的性能
如何选择选择符??
浏览器的渲染和操作顺序
浏览器的渲染和操作顺序
浏览器的渲染和操作顺序
浏览器的渲染和操作顺序
页面加载、 reflow 过程示意
reflow 对于 DOM 结构中的各个元素都有自己的盒子(模型),这些都需要浏览器根据各种样式(浏览器的、开发人员定义的等)来计算,并 根据计算结果将元素放到它该出现的位置 ,这个过程称之为 reflow
页面加载、 reflow 过程示意 ,[object Object],[object Object]
触发  reflow  的原因 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],—— 来自于 Yahoo! 性能工程师 Nicole Sullivan 的总结
减少  reflow  的触发 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],—— Yahoo! 性能工程师 Nicole Sullivan 对减小 reflow 影响的建议
继续减少  reflow  的触发 ,[object Object],[object Object],[object Object]
repaint 当各种盒子的位置、大小以及其他属性,例如颜色、字体大小等都确定下来后, 浏览器于是便把这些元素都按照各自的特性绘制了一遍 ,于是页面的内容出现了,这个过程称之为 repaint
常见的触发  repaint  因素 ,[object Object],[object Object],[object Object],[object Object]
selector reflow repaint .link1  {  color:#0053aa;  text-decoration:none;font-size:22px;display:block; height:26px; } .link1:hover  { text-decoration:underline; color:red; height:36px; } div ul div span a  {  color:#0053aa;  text-decoration:none;font-size:22px;display:block; height:26px; } div ul div span a:hover  { text-decoration:underline; color:red; height:36px; }
div ul div span a
.link1
如何选择才会有收获!?
 

More Related Content

Viewers also liked

1022土板課程計畫123
1022土板課程計畫1231022土板課程計畫123
1022土板課程計畫123Tbps Gabon
 
寫程式?那些老師沒教的事
寫程式?那些老師沒教的事寫程式?那些老師沒教的事
寫程式?那些老師沒教的事均民 戴
 
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境均民 戴
 
Mac os Terminal 常用指令與小技巧
Mac os Terminal 常用指令與小技巧Mac os Terminal 常用指令與小技巧
Mac os Terminal 常用指令與小技巧Chen Liwei
 
Lambda's CNC @FabLab 10/27/14
Lambda's CNC @FabLab 10/27/14Lambda's CNC @FabLab 10/27/14
Lambda's CNC @FabLab 10/27/14宗凡 楊
 
MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化Jinrong Ye
 

Viewers also liked (6)

1022土板課程計畫123
1022土板課程計畫1231022土板課程計畫123
1022土板課程計畫123
 
寫程式?那些老師沒教的事
寫程式?那些老師沒教的事寫程式?那些老師沒教的事
寫程式?那些老師沒教的事
 
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
 
Mac os Terminal 常用指令與小技巧
Mac os Terminal 常用指令與小技巧Mac os Terminal 常用指令與小技巧
Mac os Terminal 常用指令與小技巧
 
Lambda's CNC @FabLab 10/27/14
Lambda's CNC @FabLab 10/27/14Lambda's CNC @FabLab 10/27/14
Lambda's CNC @FabLab 10/27/14
 
MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化
 

Similar to Css性能优化

Inside the-browser
Inside the-browserInside the-browser
Inside the-browserjy03845581
 
Inside the browser
Inside the browserInside the browser
Inside the browserotakustay
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染Ailsa126
 
让我们的页面跑得更快
让我们的页面跑得更快让我们的页面跑得更快
让我们的页面跑得更快li qiang
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京Joseph Chiang
 
Web前端标准在各浏览器中的实现差异
Web前端标准在各浏览器中的实现差异Web前端标准在各浏览器中的实现差异
Web前端标准在各浏览器中的实现差异cleverpig
 
TBAD F2E 2010 review
TBAD F2E 2010 reviewTBAD F2E 2010 review
TBAD F2E 2010 reviewleneli
 
Html5和css3入门
Html5和css3入门Html5和css3入门
Html5和css3入门Xiujun Ma
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践Du Yamin
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践jay li
 
面向对象的CSS
面向对象的CSS面向对象的CSS
面向对象的CSSJerry Xie
 
网易相册前端页面开发规范2010版
网易相册前端页面开发规范2010版网易相册前端页面开发规范2010版
网易相册前端页面开发规范2010版昌里大金猪 Luke
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renrend0nn9n
 
深入剖析浏览器
深入剖析浏览器深入剖析浏览器
深入剖析浏览器jay li
 
Flash RIA Usability
Flash RIA UsabilityFlash RIA Usability
Flash RIA Usabilitynbaction
 
CSS 培训
CSS 培训CSS 培训
CSS 培训S S
 

Similar to Css性能优化 (20)

Inside the-browser
Inside the-browserInside the-browser
Inside the-browser
 
Inside the browser
Inside the browserInside the browser
Inside the browser
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
 
Html&css基础
Html&css基础Html&css基础
Html&css基础
 
让我们的页面跑得更快
让我们的页面跑得更快让我们的页面跑得更快
让我们的页面跑得更快
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京
 
Web前端标准在各浏览器中的实现差异
Web前端标准在各浏览器中的实现差异Web前端标准在各浏览器中的实现差异
Web前端标准在各浏览器中的实现差异
 
TBAD F2E 2010 review
TBAD F2E 2010 reviewTBAD F2E 2010 review
TBAD F2E 2010 review
 
Html5和css3入门
Html5和css3入门Html5和css3入门
Html5和css3入门
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践
 
淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践淘宝移动端Web开发最佳实践
淘宝移动端Web开发最佳实践
 
面向对象的CSS
面向对象的CSS面向对象的CSS
面向对象的CSS
 
Js dom
Js domJs dom
Js dom
 
网易相册前端页面开发规范2010版
网易相册前端页面开发规范2010版网易相册前端页面开发规范2010版
网易相册前端页面开发规范2010版
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renren
 
深入剖析浏览器
深入剖析浏览器深入剖析浏览器
深入剖析浏览器
 
Structs2簡介
Structs2簡介 Structs2簡介
Structs2簡介
 
Flash RIA Usability
Flash RIA UsabilityFlash RIA Usability
Flash RIA Usability
 
Flash ria usability 刘轩飞
Flash ria usability 刘轩飞Flash ria usability 刘轩飞
Flash ria usability 刘轩飞
 
CSS 培训
CSS 培训CSS 培训
CSS 培训
 

Css性能优化

Editor's Notes

  1. 这是多么一个扯淡的话题啊
  2. 选择符的应用都是 从右自左 ,关键的一个选择符就是 a.class0001 … a.class1000
  3. 从右到左的读取方式,最右边的是“目标选择器”,也就是最终会被 CSS 渲染的对象 从目前测试中看到的结果,直接标签选择符 a 标签这个是最快的(从数量上对比而言 4 个 ) 最慢的是那条最长的选择符(从数量上对比而言 3 个 )
  4. 该怎么用就怎么用,别嵌套太多就是了,现在这年头的页面,如果不是已经被优化到极限的页面,这么一点选择符的性能会对页面产生多少性能上的影响呢。
  5. 可以看出 javascript 脚本是可以在 dom 构造之前运行的
  6. 可以看出 javascript 脚本是可以在 dom 构造之前运行的
  7. 可以看出 javascript 脚本是可以在 dom 构造之前运行的
  8. 可以看出 javascript 脚本是可以在 dom 构造之前运行的
  9. 对于 DOM 结构中的各个元素都有自己的盒子(模型),这些都需要浏览器根据各种样式(浏览器的、开发人员定义的等)来计算并根据计算结果将元素放到它该出现的位置,这个过程称之为 reflow ;
  10. 激活伪类,尤其是 IE7 和 8 中使用 div:hover 的这类方式,而不是 a:hover 的方式
  11. reflow 是不可避免的,只能将 reflow 对性能的影响减到最小。 Css expression 除了 IE5-7 以外,其他的浏览器是不支持的, IE8 已经开始弃用了
  12. 图片的尺寸固定,避免浏览器对图片大小的 reflow 和 repaint 的过程 如果图片的大小不固定的话,那么可以考虑让图片的父级设置为块级元素,并给予一个宽高值
  13. repaint( 重绘 ) 是在一个元素的外观被改变,但没有改变布局的情况下发生,如改变 visibility 、 outline 、前景色。
  14. 在 IE8 中表现出来的结果 div ul div span a 显得比较卡,而 .link1 则显得相对比较流畅
  15. 在 IE8 中表现出来的结果 div ul div span a 显得比较卡,而 .link1 则显得相对比较流畅
  16. 在 IE8 中表现出来的结果 div ul div span a 显得比较卡,而 .link1 则显得相对比较流畅
  17. 在尽量减少 reflow 产生的前提下,选择符的嵌套层级尽可能少,最好不要超过三层