关于fragment的问题

图片描述
其实会用,但不是真正了解fragment的意义,哪位大神能指教一下

阅读 2.5k
5 个回答

fragment就是动态创建元素的缓存。

从前计算机的性能不足,浏览器也没有优化,所以动态创建很多的元素时,需要fragment来提升性能。

如果不用fragment,比如你创建了一百个元素,那就要插入DOM中一百次,引起reflow、repaint等一百次;用了fragment,一次就够了。

当然,现在计算机性能普遍足够强大,浏览器在DOM操作上又有很多优化,一般即使不用fragment也不要紧了。有的时候,用fragment反而降低性能。

fragment主要是用于存在大量添加dom节点的情况

  • 比如说现在有500个节点需要批量添加到list里面(当然了,很少有这种情况,先假设存在),如果一个个appendChild一定会非常慢,因为dom性能优化的一个很重要的点在于减少dom节点的遍历,所以采用documentFragment会比较快一点,因为只会遍历一次
    第二点,为了解决批量添加的问题,对后端开发来说,dom实际上是一点都不想了解的,所以他们一般采用第二种方法,拼接字符串然后一次性遍历,进一步的优化方案是申请一个数组(因为地址是连续的),然后toString()转换一下再一次性添加上去

fragment是为了减少直接DOM操作造成的重新渲染带来的性能问题

fragment可以理解为外挂一个容器,这个容器和页面的DOM是分开的,因为直接操作页面的DOM会带来整个DOM树从新渲染的性能问题,所以我们可以把一些频繁的操作(尤其是for循环操作DOMDOM的行为放到fragment里面,等到这些操作结束了,再将fragment作为一个整体插入到页面中,这样这需要一次DOM操作,可以在一定程度上提高性能

JS的操作实质操作的是DOM树而不是那些什么破HTML代码。

就好比一面墙,墙是DOM树,DOM节点是砖头。

你现在想在墙的最底下砌一块砖头,就需要先把墙上的转移来移去才能放进去。比较耗费精力。

放一块儿就够你干一天, 结果放玩第一块,又叫你放第三块,第四块...

那你为什么不先把要放的砖先拿混凝土弄好,再一次行全部砌到墙上去, 这样你只用挪动一次墙上的砖头。

DOM对象不一定是在DOM树上的,你创建的对象如果不放到树上去,就和普通的JS对象是一样的。

在这个场景中,fragment的功能就是将要插入的DOM对象先组合在一起的功能。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题