
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
浏览器加载与性能优化是需要软件开发程序员长期关注的一个问题,下面我们就通过案例分析来了解一下,常见的浏览器性能优化方法都有哪些。
回流(Reflow)
当渲染树rendertree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流(reflow)。每个页面至少需要一次回流,就是在页面一次加载的时候,这时候是一定会发生回流的,因为要构建rendertree。在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,该过程称为重绘。
简单来说,回流就是计算元素在设备内的确切位置和大小并且重新绘制
回流的代价要远大于重绘。并且回流必然会造成重绘,但重绘不一定会造成回流。
重绘(Repaint)
当渲染树rendertree中的一些元素需要更新样式,但这些样式属性只是改变元素的外观,风格,而不会影响布局的,比如background-color。则就叫称为重绘(repaint)。
简单来说,重绘就是将渲染树节点转换为屏幕上的实际像素,不涉及重新布局阶段的位置与大小计算
为什么不建议频繁操作DOM?
我们都知道操作DOM其实是非常耗性能的,所以我们不仅要避免去操作DOM,还要减少访问DOM的次数。
因为在浏览器中,DOM和JS的实现,并不是在同一个引擎中完成的。DOM是属于渲染引擎中的东⻄,⽽JS⼜是JS引擎中的东⻄。当我们通过JS操作DOM的时候,就涉及到了两个线程之间的通信,那么势必会带来⼀些性能上的损耗。操作DOM次数⼀多,也就等同于⼀直在进⾏线程之间的通信,并且操作DOM可能还会带来重绘回流的情况,所以也就导致了性能上的问题。
把DOM和JavaScript各自想象成一个岛屿,它们之间用收费桥梁连接。
--《高性能JavaScript》
何时会发生回流(Reflow)与重绘(Repaint)?
会导致回流的操作:
页面次渲染(无法避免且开销大的一次)
浏览器窗口大小发生改变(resize事件)
元素尺寸或位置发生改变(边距、宽高、边框等)
元素内容变化(文字数量或图片大小等等)
元素字体大小变化(font-size)
添加或者删除可见的DOM元素
激活CSS伪类(例如::hover)
查询某些属性或调用某些方法
浏览器的优化机制
由于每次重排都会造成额外的计算消耗,因此大多数浏览器都会通过队列化修改并批量执行来优化重排过程。浏览器会将修改操作放入到队列里,直到过了一段时间或者操作达到了一个阈值,才会进行批量修改并清空队列。但是,在获取布局信息的时候,会强制刷新队列
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。