DOM回流
[x] 回流(重排reflow):当页面中HTML结构发生改变(增、删元素、位置发生改变),浏览器需要从新计算一遍最新DOM结构,从新对当前页面进行渲染。(尽量减少DOM回流)
[x] 重绘:某一个元素的部分样式发生改变(背景颜色),浏览器只需重新渲染当前的元素即可
数据绑定
知识点
- [x] 省略号代替多余文本
|
|
三种数据绑定实现方式
[x] 1、动态创建元素节点并追加到页面中实现数据绑定
- [ ] 优点: 一个个追加到页面中,对原来的元素无影响
[ ] 劣势: 每创建一个li,就添加到页面中,引发一次DOM回流,引发回流的次数影响我们的性能
123456for(var i=0;i<arr.length;i++){var cur=arr[i];var newli=document.createElement("li");newli.innerHTML="<span>0"+(i+4)+"</span>"+cur.title;ul.appendChild(newli);}
[x] 2、字符串拼接(最常用):首先循环需要绑定的数据,然后把需要动态绑定的标签以字符串的方式拼接完成后,统一添加到页面(模板引擎数据绑定(jade、kTemplate、angular.js、backbone.js…))
- [ ] 拼接好后统一到页面中,只引发一次回流
[ ] 把拼接的字符串添加到ul中,原有的li鼠标滑过效果消失(原有标签绑定事件消失)
1234567891011var str="";for(var i=0;i<arr.length;i++){var cur=arr[i];str+="<li>";str+="<span>0"+(i+4)+"</span>";str+=cur.title;str+="</li>";// str+="<li><span>0"+(i+4)+"</span>"+cur.title+"</li>"}ul.innerHTML+=str;//没加号会覆盖原有内容//ul.innerHTML=ul.innerHTML(把之前的li以字符串的方式获得)+str;(拼接完成的整体还是字符串,最后字符串统一添加到页面,浏览器还需要把字符串渲染成对应的标签)
【注意】:注意拼接的字符标签空格问题,易出错
[x] 3、文档碎片
[ ] 避免了回流次数,且对之前的li无影响
123456789var frg=document.createDocumentFragment();//->创建一个文档碎片,相当于临时创建一个容器for(var i=0;i<arr.length;i++){var cur=arr[i];var newli=document.createElement("li");newli.innerHTML="<span>0"+(i+4)+"</span>"+cur.title;frg.appendChild(newli);}ul.appendChild(frg);frg=null;//手动释放堆内存
源码
|
|