页面渲染性能优化 |
您所在的位置:网站首页 › 网页的渲染过程 › 页面渲染性能优化 |
# 页面渲染性能优化 # 浏览器渲染过程(Webkit) 在渲染方面我们要减少重排和重绘,因为他们会影响浏览器性能。可是,为什么,原理是什么呢? 浏览器的解释器,是包括在渲染引擎内的,我们常说的 Chrome(现在使用的是 Blink 引擎)和Safari 使用的Webkit 引擎, Firefox 使用的 Gecko 引擎,指的就是渲染引擎。而在渲染引擎内,还包括着我们的 HTML 解释器(渲染时用于构造 DOM 树)、 CSS 解释器(渲染时用于合成 CSS 规则)还有我们的 JS 解释器。不过后来,由于 JS 的使用越来越重要,工作越来越繁杂,所以 JS 解释器也渐渐独立出来,成为了单独的 JS 引擎,就像众所周知的 V8 引擎,我们经常接触的 Node.js 也是用的它。 一个页面是有许多许多层级组成的,他们就像千层面那样。 页面的真实样子就是这样,是由多个 DOM 元素渲染层(Layers)组成的,实际上一个页面在构建完 render tree 之后,是经历了这样的流程才最终呈现在我们面前的。 浏览器会先获取 DOM 树并依据样式将其分割成多个独立的渲染层。 CPU 将每个层绘制进绘图中。 将位图作为纹理上传至 GPU(显卡)绘制。 GPU 将所有的渲染层缓存(如果下次上传的渲染层没有发生变化, GPU 就不需要对其进行重绘)并复合多个渲染层最终形成我们的图像。从上面的步骤我们可以知道,布局是由 CPU 处理的,而绘制则是由 GPU 完成的。 # 重排与重绘现在到我们的重头戏了,重排和重绘。 重排(reflow):渲染层内的元素布局发生修改,都会导致页面重新排列,比如窗口的尺寸发生变化、删除或添加 DOM 元素,修改了影响元素盒子大小的 CSS 属性(诸如: width、 height、padding)。 重绘(repaint):绘制,即渲染上色,所有对元素的视觉表现属性的修改,都会引发重绘。我们习惯使用 chrome devtools 中的 performance 版块来测量页面重排重绘所占据的时间 不论是重排还是重绘,都会阻塞浏览器。要提高网页性能,就要降低重排和重绘的频率和成本,近可能少地触发重新渲染。重排是由 CPU 处理的,而重绘是由 GPU 处理的,CPU 的处理效率远不及 GPU,并且重排一定会引发重绘,而重绘不一定会引发重排。所以在性能优化工作中,我们更应当着重减少重排的发生。 ← 原型链 js微任务和宏任务 → |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |