老师,关于DOM节点的渲染的问题
老师,一般的js文件中,在使用appendchild()之后,整个DOM树是会重新的渲染一遍吗。在vue中使用的虚拟dom,就不会重新渲染一遍吗,为什么还有局部渲染的说法?然后就是wx中wx:for的性能问题还有为什么加了key之后渲染就没有性能问题了?
正在回答
同学你好,解答如下:
1、一般的js中,appendchild()不一定会让整个dom树重新渲染。不受appendchild影响的地方,就可能不会重新渲染。如果appendchild导致整个dom树中的元素位置都变化了,那么dom树就可能全部重新渲染了,通过重新渲染将各个元素排布到合适的位置。
2、vue中使用虚拟dom后,可以减少重新渲染的次数。vue中不鼓励使用appendchild等方法直接操作dom元素,而是建议我们使用数据驱动dom。即最好使用wx:for等属性,渲染dom结构。使用wx:for之后,只要数据改变了,那么dom元素就会改变。此时会有一种情况,数据变化前和变化后,变动很小,例如:


为了节省性能,vue或者小程序会比较变化前后的dom结构,然后只更新发生变化的dom结构、渲染新生成的dom结构,没变的结构就使用之前的:



这样就可以实现局部渲染了。
3、wx:for会遍历数据并生成结构。假设数组有1000个元素,那么可能就需要遍历1000次,并生成1000个结构,这个过程需要花费时间、内存...,所以会耗费性能。
使用key之后,vue或小程序可以利用key快速的知道哪些结构是没有变化的,是不需要重新渲染的,进而实现局部渲染。此时即使是遍历了1000次,但是实际渲染的次数可以小于1000,这样就大大提升了性能。
简单了解即可,祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星