Vue原理
2021-10-13 15:48:51   1  举报             
     
         
 AI智能生成
  Vue原理脑图,包括MVVM的基本原理,以及Vue 3.x的优化点。
    作者其他创作
 大纲/内容
  Watcher    
     update时,执行run方法    
     queueWatcher异步批量:通过nexttick异步执行flushSchedulerQueue,批量调用run方法  
     同步执行run  
     new Watcher(vm,cb)    
     调用get方法时,通过pushTarget绑定Dep.target  
     run方法会调用实例化是的cb,通知视图更新  
     Dep    
     收集依赖:dependence  
     depend:添加依赖关系
  
     notify:通知变化  
     Dep.target/targetStack  
     Updater    
     vNode是个对象    
     tag:vnode的标签属性
  
     data:最后渲染成真实dom节点后,节点上的class,attribute,style以及绑定的事件
  
     children:vnode的子节点
  
     text:文本属性
  
     elm:这个vnode对应的真实dom节点
  
     key:vnode的标记,在diff过程中可以提高diff的效率,后文有讲解  
     对应vm    
     方案一:document.createRange()  
     方案二:document.createDocumentFragment()  
     vue方案:snabbdom的h函数+patch函数  
     通过diff算法更新dom    
     Vue 3.x优化    
     patchFlag:对静态节点跳过diff过程  
     事件默认开缓存  
     Observer    
     劫持监听所有属性  
     Object.defineProperty()    
     getter  
     setter  
     对应model  
     Vue 3.x优化    
     使用Proxy代理对象  
     Compiler    
     解析html模版  
     v-model  
     v-bind  
     v-on  
     queueWatcher    
     nexttick    
     Promise:微任务  
     MutationObserver:H5微任务  
     setImmediate:Node宏任务  
     setTimeout:宏任务  
     flushSchedulerQueue    
     for循环执行queue  
     diff算法    
     patch    
     老节点不存在,创建新节点对应的dom  
     老节点不是真实dom,而且新老节点相同,调用patchVnode  
     其他,删除老节点  
     patchVnode/diff过程    
     新node是常规节点    
     新老节点都有子节点,调用updateChildren  
     新节点才有子节点,添加新子节点  
     老节点才有子节点,移除老子节点  
     老节点是文本节点    
     文本设置为''  
     新node是文本节点,且文本值与老node不同    
     替换老node的值  
     updateChildren,再调用patchVnode    
     头头对比  
     尾尾对比  
     头尾对比  
     尾头对比  
     其他    
     key对比  
     创建新节点  
     老子节点数组先遍历完,添加其他新子节点  
     新子节点数组先遍历完,移除多余的老子节点  
    
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
  
  
 