美文网首页
reflow小结

reflow小结

作者: 天一呀 | 来源:发表于2018-07-26 16:08 被阅读0次

整个在浏览器的渲染过程中最重要的性能损失就在reflow(回流)和repaint(重绘) ,尤其是手机页面。因此我们在页面设计的时候要尽量减少reflow和repaint。

reflow:几乎是无法避免的。现在界面上流行的一些效果,比如树状目录的折叠、展开(实质上是元素的显 示与隐藏)等,都将引起浏览器的 reflow。鼠标滑过、点击……只要这些行为引起了页面上某些元素的占位面积、定位方式、边距等属性的变化,都会引起它内部、周围甚至整个页面的重新渲 染。通常我们都无法预估浏览器到底会 reflow 哪一部分的代码,它们都彼此相互影响着。

repaint:如果只是改变某个元素的背景色、文 字颜色、边框颜色等等不影响它周围或内部布局的属性,将只会引起浏览器 repaint(重绘)。repaint 的速度明显快于 reflow

  1. width/height/border/margin/padding的修改,如width=778px;
  2. 动画,:hover等伪类引起的元素表现改动,display=none等造成页面回流;
  3. appendChild等DOM元素操作;
  4. font类style的修改;
  5. background的修改,注意着字面上可能以为是重绘,但是浏览器确实回流了,经过浏览器厂家的优化,部分background的修改只触发repaint,当然IE不用考虑;
  6. scroll页面,这个不可避免;
  7. resize页面,桌面版本的进行浏览器大小的缩放,移动端的话,还没玩过能拖动程序,resize程序窗口大小的多窗口操作系统。
  8. 读取元素的某些属性(offsetLeft、offsetTop、offsetHeight、offsetWidth、scrollTop/Left/Width/Height、clientTop/Left/Width/Height、getComputedStyle()、currentStyle(in IE));

减少回流要注意

1:不要通过父级来改变子元素样式,最好直接改变子元素样式,改变子元素样式尽可能不要影响父元素和兄弟元素的大小和尺寸
2:尽量通过class来设计元素样式,切忌用style
3:实现元素的动画,对于经常要进行回流的组件,要抽离出来,它的position属性应当设为fixed或absolute
4:权衡速度的平滑。比如实现一个动画,以1个像素为单位移动这样最平滑,但reflow就会过于频繁,CPU很快就会被完全占用。如果以3个像素为单位移动就会好很多。
5:不要用tables布局的另一个原因就是tables中某个元素一旦触发reflow就会导致table里所有的其它元素reflow。在适合用table的场合,可以设置table-layout为auto或fixed,
6:这样可以让table一行一行的渲染,这种做法也是为了限制reflow的影响范围。
7:css里不要有表达式expression
8:减少不必要的 DOM 层级(DOM depth)。改变 DOM 树中的一级会导致所有层级的改变,上至根部,下至被改变节点的子节点。这导致大量时间耗费在执行 reflow 上面。
9:避免不必要的复杂的 CSS 选择器,尤其是后代选择器(descendant selectors),因为为了匹配选择器将耗费更多的 CPU。
10: 尽量不要过多的频繁的去增加,修改,删除元素,因为这可能会频繁的导致页面reflow,可以先把该dom节点抽离到内存中进行复杂的操作然后再display到页面上。
11:请求如下值offsetTop, offsetLeft, offsetWidth, offsetHeight,scrollTop/Left/Width/Height,clientTop/Left/Width/Height,浏览器会发生reflow,建议将他们合并到一起操作,可以减少回流的次数。
如果我们要经常去获取和操作这些值,则可以先将这些值缓存起来

相关文章

  • reflow小结

    整个在浏览器的渲染过程中最重要的性能损失就在reflow(回流)和repaint(重绘) ,尤其是手机页面。因此我...

  • html元素的隐藏

    通过js操作css样式的隐藏 function hide(e, reflow) { if (reflow) { e...

  • 前端性能

    Reflow 和 Repaint

  • CSS的reflow和repaint

    CSS的reflow和repaint 什么是reflow 浏览器为了重新渲染部分或整个页面,重新计算页面元素位置和...

  • 浏览器的异步reflow(layout)和同步reflow

    浏览器为了尽可能减少reflow和repaint操作, 会将这些操作累积起来, 等到某个时刻统一做一次reflow...

  • 特效

    【1】https://reflow.huoshan.com/share/item/6529044314327092...

  • highCharts的概念理解

    1、 chart:图表配置:type、animation、colorCount、reflow、renderTo等图...

  • 浏览器的渲染机制

    reflow(回流) 和 repaint(重绘):http://blog.csdn.net/ClaireKe/ar...

  • repain 与 reflow

    http://blog.csdn.net/oscar999/article/details/38379523 re...

  • 减少回流(reflow)

    回流(重排)——浏览器重新渲染部分或全部文档而重新计算文档中元素的位置 指导方针: 1.减少不必要的DOM深度 2...

网友评论

      本文标题:reflow小结

      本文链接:https://www.haomeiwen.com/subject/lbmbmftx.html