博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入理解Vue源码系列-6.认识下virtual dom
阅读量:6343 次
发布时间:2019-06-22

本文共 2759 字,大约阅读时间需要 9 分钟。

开始

这篇写一下virtual dom.

为什么会出现virtualDom

因为Dom上面有很多属性,方法,导致dom天生很慢,我们看看dom有什么,跑下面的代码,看代码

var a = document.createElement('a');    var str='';    for(var k in a){      str+=k+' '    }    console.log(str)复制代码

挂这么多东西,不慢才怪呢。

virtualDom是什么

对Dom的一种抽象

Vue中virtualDom的定义

看看vue中virtualDom的定义,就是上一节的 vnode

export default class VNode {    //标签名  tag: string | void;    //数据  data: VNodeData | void;//子dom  children: ?Array
; text: string | void;//dom元素 elm: Node | void; ns: string | void; context: Component | void; // rendered in this component's scope key: string | number | void; componentOptions: VNodeComponentOptions | void; componentInstance: Component | void; // component instance parent: VNode | void; // component placeholder node // strictly internal raw: boolean; // contains raw HTML? (server only) isStatic: boolean; // hoisted static node isRootInsert: boolean; // necessary for enter transition check isComment: boolean; // empty comment placeholder? isCloned: boolean; // is a cloned node? isOnce: boolean; // is a v-once node? asyncFactory: Function | void; // async component factory function asyncMeta: Object | void; isAsyncPlaceholder: boolean; ssrContext: Object | void; fnContext: Component | void; // real context vm for functional nodes fnOptions: ?ComponentOptions; // for SSR caching devtoolsMeta: ?Object; // used to store functional render context for devtools fnScopeId: ?string; // functional scope id support constructor ( tag?: string, data?: VNodeData, children?: ?Array
, text?: string, elm?: Node, context?: Component, componentOptions?: VNodeComponentOptions, asyncFactory?: Function ) { this.tag = tag this.data = data this.children = children this.text = text this.elm = elm this.ns = undefined this.context = context this.fnContext = undefined this.fnOptions = undefined this.fnScopeId = undefined this.key = data && data.key this.componentOptions = componentOptions this.componentInstance = undefined this.parent = undefined this.raw = false this.isStatic = false this.isRootInsert = true this.isComment = false this.isCloned = false this.isOnce = false this.asyncFactory = asyncFactory this.asyncMeta = undefined this.isAsyncPlaceholder = false } // DEPRECATED: alias for componentInstance for backwards compat. /* istanbul ignore next */ get child (): Component | void { return this.componentInstance }}复制代码

就是减了很多原来dom上用不太到的东西。简化了Dom,我们自己也可以写一个简易版的Virtual dom

let vNodes = v('div',{    attr:{        id:"abc"    }},'sdji')复制代码

上面这个大概就是 下面的dom,可以这样理解

sdji
复制代码

就是语法糖吧

总结

这里要了解为什么用虚拟dom和虚拟dom在vue中用vnode表示就可以了

转载于:https://juejin.im/post/5c792d8bf265da2d9d1cc557

你可能感兴趣的文章
6811汇编语言
查看>>
LINQ 模糊搜索
查看>>
JS阻止冒泡方法(转)
查看>>
Linux下XAMPP装完之后,Navicat无法连上数据库的问题的解决 注意'mypassword'是当前的mysql登录密码...
查看>>
javascript之求最值
查看>>
终止java线程的2种方法
查看>>
Node.js使用的场景 (翻译自Node.js早期贡献者Felix的文章)
查看>>
Loadrunner windows计数器
查看>>
iOS开发UI篇—UITableviewcell的性能问题
查看>>
Intel 被 ARM 逼急了
查看>>
testng + reportng 测试结果邮件发送
查看>>
我为何从开发转测试,并坚持了 16 年?
查看>>
讯飞新品翻译机上BOAO 只见追随搜狗不见创新
查看>>
神操作:如何将Vim变成一个R语言IDE
查看>>
复星旅文通过聆讯:上半年营收66.7亿 预计年底前上市
查看>>
百度亮相iDASH,推动隐私保护在人类基因组分析领域的应用
查看>>
乌鲁木齐国际机场能见度好转滞留旅客有序排队候机
查看>>
民航局:春运期间10个大型机场将延长国内航班运行时间
查看>>
比特币暴涨拉升至1w美元以上,说比特币崩盘的专家要失望了
查看>>
Python「八宗罪」
查看>>