Vnode是如何产生的?

2024-04-19 03:52
文章标签 产生 vnode

本文主要是介绍Vnode是如何产生的?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

源码 流程图

在这里插入图片描述

源码解读

Vue.js2.0中有两种生成方式:第一种是直接在Vue对象的option中添加render字段;第二种是像Vue.js 1.x版本那样写一个模板或者指定一个el根元素,它会首先转换成模板,经过HTMI语法解析器生成一个 ast 抽象语法树,对语法树做优化,然后把语法树转换成代码片段,最后通过代码片段生成function添加到option的render字段中。
在整个过程中,特别值得一提的是ast语法树优化的过程,它主要做了两件事情:

  1. 会检测出静态的class名和attributes,这样它们在初始化渲染之后就永远都不会再被比
    对了。
  2. 会检测出最大的静态子树(就是不需要动态性的子树)并且从渲染函数中萃取出来。这
    样在每次重渲染时,它就会直接重用完全相同的Vnode,同时跳过比对。
    接下来我们可以通过一段简单的代码看一下编译后的渲染函数。代码示例如下:
<div id="app">
<h1>Hello {{who}}</h1>
</div><script>
new Vue({el:'#app',data:{who:'DDFE'}
})
</script>

经过一系列的编译操作之后生成的render方法。示例如下:

with (this) (
return _h(_e('div',
{staticAttrs;{"id":"app"}}),
[_h(_e('h1'),]
[("Hello "+ _s(who))]
})

这篇关于Vnode是如何产生的?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/916569

相关文章

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

V---机器视觉图像误判产生的因素

1.环境光 (1)图像传感器周围的光照产生的影响; (2)外接的强光产生的影响,造成图像的差异; 2.产品的个体差异 (1)产品批次变更; (2)测试时使用的样品和实际生产的产品的制作环境不同,实际生产产品有细微差异,造成干扰。 3.产品来料位置不同造成的差异 (1)假如产品移动到图像传感器视野的角落时,可能会产生形变,形变的差异造成误判。 (2)假如产品移动到图像传感器视野的不同

用鼠标拖动终端cmd 会产生ctrl-C中断,导致程序终止

电脑上用vnc或者mstsc登陆远程服务器,只要一用鼠标拖动终端的窗口,就会产生一个^C中断,就像按下了Ctrl-C一样,导致正在运行的程序终止。用鼠标选定内容后复制或者拖动滚动条也会出现同样的问题。 对此问题的解决方案是,将WIN上运行的各种词典关闭屏幕取词! 也有可能是系统上的某个软件影响到了远端的cmd上的运行,可以全部关闭测试。

平台用户一千万的情况有没有高并发产生?

问: 平台用户一千万的情况有没有高并发产生? 回答: 有的。在一个拥有一千万用户的平台上,即使并非所有用户都同时活跃,仍然可能在某些时段(如促销活动或热门事件)出现高并发情况。处理如此大规模用户的并发请求,需要强大的后端支持和高效的前端优化来确保平台稳定性和响应速度 问: 前端对这个情况该怎么做 回答: 前端在应对一千万用户的高并发情况时,可以采取以下措施: 内容优化:减少页面加

DuplicateKeyException产生原因及解决方案

DuplicateKeyException 是 Spring 框架中与数据库操作相关的异常之一,通常在试图向数据库中插入一条记录时,违反了唯一性约束(如主键或唯一索引约束)时抛出。这意味着数据库中已经存在具有相同键值的记录,导致插入操作失败。 一、产生原因 主键冲突: 原因: 在数据库表中,每个记录的主键(Primary Key)必须唯一。当尝试插入一条记录,其主键值与现有记录的主键值相同时

如何批量的产生创意?

如何批量的产生创意? 1.发现身边的创意2.联想术3.模仿 1.怎么发现身边的创意? 1.组合门:1+1>22.拆开门:少即是多 2.什么是组合门? 1.核心:组合的物品更加便利2.walkman播放器 背景痛点新品有耳机,有收音机录音机笨重,需要随时随地的播放音乐新的播放器小,能用耳机收听 3.什么是拆开门? 1.核心:物品要高频 ,易使用 根据极限拆开 (流水线就只5个以内

怎么产生创意?

怎么产生创意? 1.什么是创意? 1.创意是人从不同的角度看同样的事务有不同的看法2.创意主要是为了解决特定的问题 2.怎么不会有创意? 1.固有习惯:习惯会束缚我们发散思考,减少尝试各种可能2.直线思维: 将曾经解决的问题套用在当下的问题上 大脑好逸恶劳,会主动选择最短的路程 3.标准答案:标准答案会让我们放弃最优解 3.怎么产生创意呢? 1.头脑风暴

C++中的空类,编译器默认可以产生哪些成员函数

C++中创建一个空类: class Empty {}; 默认会生成4个函数,其函数的原型如下: public: Empty() { ... }  Empty(const Empty& rhs) { ... }   ~Empty() { ... }   Empty& operator=(const Empty& rhs) { ... } 说明:1) 这些函数只有在需要调用的时候,编译器才会

js 解决由于#65279(bom文件格式)产生的空白行

把以下代码放到HTML页面的head标签里就行了: <script> var a=document.body.innerHTML; document.body.innerHTML=a.replace(/\ufeff/g,''); </script>

DataAccessException产生原因及解决方案

DataAccessException 是 Spring 框架中的一个通用异常,表示与数据访问操作相关的问题。它是一个非检查(unchecked)异常的基类,用于封装底层的数据访问异常,特别是那些与数据库操作相关的异常。Spring 使用 DataAccessException 将不同的数据访问异常统一封装,使得应用程序不必直接处理数据库特定的异常(如 SQL 异常),而是通过统一的异常处理机制进