markdown 重绘,回流---优化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown 重绘,回流---优化相关的知识,希望对你有一定的参考价值。

## 重绘和回流

重绘和回流是面试题经常考的题目,也是性能优化当中应该注意的点,下面笔者简单介绍下。

*   **重绘**:指的是当页面中的元素不脱离文档流,而简单地进行样式的变化,比如修改颜色、背景等,浏览器重新绘制样式
*   **回流**:指的是处于文档流中 DOM 的尺寸大小、位置或者某些属性发生变化时,导致浏览器重新渲染部分或全部文档的情况

相比之下,**回流要比重绘消耗性能开支更大**。另外,一些属性的读取也会引起回流,比如读取某个 DOM 的高度和宽度,或者使用`getComputedStyle`方法。在写代码的时候要避免回流和重绘。比如在笔试中可能会遇见下面的题目:

> 题目:找出下面代码的优化点,并且优化它

```javascript
var data = ['string1', 'string2', 'string3'];
for(var i = 0; i < data.length; i++){
    var dom = document.getElementById('list');
    dom.innerHTML += '<li>' + data[i] + '</li>';
}

```

上面的代码在循环中每次都获取`dom`,然后对其内部的 HTML 进行累加`li`,每次都会操作 DOM 结构,可以改成使用`documentFragment`或者先遍历组成 HTML 的字符串,最后操作一次`innerHTML`。

> documentFragment例子  
```javascript
var list1 = document.getElementById('list1');
console.time("time");
var fragment = document.createDocumentFragment();
for(var i = 0; i < 500000; i++){
    fragment.appendChild(document.createElement('li'));
}
list1.appendChild(fragment);
console.timeEnd('time');
```

* * *

以上是关于markdown 重绘,回流---优化的主要内容,如果未能解决你的问题,请参考以下文章

页面重绘和回流以及优化

页面优化,谈谈重绘(repaint)和回流(reflow)

前端性能优化—回流与重绘

前端性能优化—回流与重绘

详解回流和重绘及优化

经典面试题:什么是回流和重绘?如何优化?