DMQ / mvvm

剖析vue实现原理,自己动手实现mvvm

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

for循环操作属性赋值问题

shengrongchun opened this issue · comments

data.index = 1
for(var i=0;i<10000;i++) {
vm.index = i;
}
//update=》run函数执行10000次,dom执行10000次,这个怎么解决?

commented

vue中使用nextTick的方式来延迟watcher中的update方法执行,放到下一个事件循环中执行。可以避免在当前事件循环中多次改动同一个值造成的多余的更新开销,也就是你指出的这个问题。具体可看vue源码:
https://github.com/vuejs/vue/blob/1.1/src/watcher.js#L235
https://github.com/vuejs/vue/blob/1.1/src/batcher.js#L91
https://github.com/vuejs/vue/blob/1.1/src/batcher.js#L39
https://github.com/vuejs/vue/blob/1.1/src/batcher.js#L57
https://github.com/vuejs/vue/blob/1.1/src/util/env.js#L65

你这里的代码,好像没有解决吧?

commented

是的,没有解决这个问题。这里的代码主要是便于说明vue的核心**及简单的实现,有很多细节的东西没有处理

这个问题加上然后再加个生命周期就比较完善了,看你的代码终于懂了vue的大致执行过程。真的太感谢了……

commented

很高兴对你有帮助