作家
登录

深入Vue2.0底层思想–模板渲染

作者: 来源: 2017-07-25 17:01:42 阅读 我要评论

  •  
  •     staticRenderFns: currentStaticRenderFns 
  •  
  •  
  • render函数

    个中 genElement 函数(src/compiler/codegen/index.js)是会根据 AST 的属性调用不合的办法生成字符串返回。

    1. function genElement (el: ASTElement): string { 
    2.  
    3.   if (el.staticRoot && !el.staticProcessed) { 
    4.  
    5.     return genStatic(el) 
    6.  
    7.   } else if (el.once && !el.onceProcessed) { 
    8.  
    9.     return genOnce(el) 
    10.  
    11.   } else if (el.for && !el.forProcessed) { 
    12.  
    13.     return genFor(el) 
    14.  
    15.   } else if (el.if && !el.ifProcessed) { 
    16.  
    17.     return genIf(el) 
    18.  
    19.   } else if (el.tag === 'template' && !el.slotTarget) { 
    20.  
    21.     return genChildren(el) || 'void 0' 
    22.  
    23.   } else if (el.tag === 'slot') { 
    24.  
    25.   } 
    26.  
    27.     return code 
    28.  
    29.   } 
    30.  
    31.  

    以上就是 compile 函数中三个核心步调的介绍,compile 之后我们获得了 render 函数 的字符串情势,后面经由过程 new Function 获得真正的衬着函数。数据发明变更后,会履行 Watcher 中的 _update 函数(src/core/instance/lifecycle.js),_update 函数会履行这个衬着函数,输出一个新的 VNode 树形构造的数据。然后在调用 patch 函数,拿这个新的 VNode 与旧的 VNode 进行比较,只有产生了变更的节点才会被更新到真实 DOM 树上。

    patch

    patch.js 就是新旧 VNode 比较的 diff 函数,主如果为了优化dom,经由过程算法使操作dom的行动降到最低,diff 算法来源竽暌冠 snabbdom,是 VDOM 思惟的核心。snabbdom 的算法为了 DOM 操作跨层级增删免得较少的┞封一目标进行优化,它只会在同层级进行, 不会跨层级比较。

    1. (function() { 
    2.  
    3.   with(this){ 
    4.  
    5.     return _c('div',{   //创建一个 div 元素 
    6.  
    7.       attrs:{"id":"app"}  //div 添加属性 id 
    8.  
    9.       },[ 
    10.  
    11.         _m(0),  //静态节点 header,此处对应 staticRenderFns 数组索引为 0 的 render 函数 

        推荐阅读

        拯救者Linux:我是如何给我的团队引入Linux的

      在项目早期就碰到公开的掉败后,一个有名大年夜学的 IT 团队决定将他们的 web 注册体系安排到 Linux上,此举几乎将办事器的最大年夜用户拜访量进步了 3 倍1998年,我在明尼苏达大年夜学为>>>详细阅读


      本文标题:深入Vue2.0底层思想–模板渲染

      地址:http://www.17bianji.com/lsqh/36398.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)