其实会用,但不是真正了解fragment的意义,哪位大神能指教一下
fragment主要是用于存在大量添加dom节点的情况
比如说现在有500个节点需要批量添加到list里面(当然了,很少有这种情况,先假设存在),如果一个个appendChild一定会非常慢,因为dom性能优化的一个很重要的点在于减少dom节点的遍历,所以采用documentFragment会比较快一点,因为只会遍历一次
第二点,为了解决批量添加的问题,对后端开发来说,dom实际上是一点都不想了解的,所以他们一般采用第二种方法,拼接字符串然后一次性遍历,进一步的优化方案是申请一个数组(因为地址是连续的),然后toString()转换一下再一次性添加上去
fragment
可以理解为外挂一个容器,这个容器和页面的DOM
是分开的,因为直接操作页面的DOM
会带来整个DOM
树从新渲染的性能问题,所以我们可以把一些频繁的操作(尤其是for
循环操作DOM
)DOM
的行为放到fragment
里面,等到这些操作结束了,再将fragment
作为一个整体插入到页面中,这样这需要一次DOM
操作,可以在一定程度上提高性能
JS的操作实质操作的是DOM树而不是那些什么破HTML代码。
就好比一面墙,墙是DOM树,DOM节点是砖头。
你现在想在墙的最底下砌一块砖头,就需要先把墙上的转移来移去才能放进去。比较耗费精力。
放一块儿就够你干一天, 结果放玩第一块,又叫你放第三块,第四块...
那你为什么不先把要放的砖先拿混凝土弄好,再一次行全部砌到墙上去, 这样你只用挪动一次墙上的砖头。
DOM对象不一定是在DOM树上的,你创建的对象如果不放到树上去,就和普通的JS对象是一样的。
在这个场景中,fragment的功能就是将要插入的DOM对象先组合在一起的功能。
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答865 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
fragment就是动态创建元素的缓存。
从前计算机的性能不足,浏览器也没有优化,所以动态创建很多的元素时,需要fragment来提升性能。
如果不用fragment,比如你创建了一百个元素,那就要插入DOM中一百次,引起reflow、repaint等一百次;用了fragment,一次就够了。
当然,现在计算机性能普遍足够强大,浏览器在DOM操作上又有很多优化,一般即使不用fragment也不要紧了。有的时候,用fragment反而降低性能。