男神,求教!!!
来源:5-4 计算属性 VS 侦听属性(4)

鸡肋2016
2018-10-26
老师你好!
我好奇,问一些问题!
1、虚拟Dom通过对新旧vnode的diff算法比较,修改vnoe.elm。修改vnoe.elm同步就修改了真实dom了吗?还是vnode.elm也只是保存修改,最后把对vnode.elm的修改全部更新到真实Dom上。
2、之前了解到js中的createDocumentFragment() ,把dom保存在其中进行修改,修改完了一次性通过其更新到dom,能提升速度性能,vue有用到这个吗?
2、vue1.0没有虚拟dom的时候,双向绑定后视图更新,组件内改变了一个数据,它是怎么更新的?
2回答
-
ustbhuangyi
2018-10-26
1. vnode.elm 是组件的 root vnode 保存的 DOM 引用,相当于组件对应的 DOM。
2. Vue 没有用 createDocumentFragment
3. 1.0 数据响应部分和 2.0 类似,只不过少了 Vitual DOM 这一层,直接去操作 DOM00 -
鸡肋2016
提问者
2018-10-26
新增一个问题
1、没有数据驱动。我们平时操作dom也是最精准的操作,相当于虚拟dom通过diff算法计算出来的操作。缺点是除了没有数据驱动带来的好处,多次频繁更新dom性能不行。这个也有解决方案,通过js的createDocumentFragment()优化性能。但我们就是要数据驱动带给我的好处呀!
2、有数据驱动后,没有虚拟dom。我不知道vue1.0怎么更新dom的。猜想是:一旦1个组件某个数据变更,直接整个组件替换重新渲染吗?!理由是,因为组件Watcher订阅数据变化通过Watcher更新,但不知道哪个节点变化了只能把订阅这个数据的组件全部替换。
3、有数据驱动后有虚拟dom。虚拟dom除了跨平台跨服务端外。给数据驱动的情况通过diff算法提供了更精准的dom更新策略是这样吗?patch时候,对比新旧vnode,修改的vnode.elm应该也只是做一个保存吧?!最后对比修改完了才通过vnode.elm全部一次性更新到浏览器。
所以结论是虚拟dom除了跨平台跨服务端外。是因为我们需要数据驱动的前提下,提供了更精准的dom更新策略。
前面是我的理解和猜想!012018-10-26
相似问题