一、什么是虚拟DOM?
虚拟DOM:用普通js对象来描述DOM结构,因为不是真实DOM,所以称之为虚拟DOM。
二、为什么要用虚拟DOM?
因为普通改变页面样式只能遍历查询 dom 树的方式找到需要修改的 dom 然后修改样式行为或者结构,来达到更新的目的。 这种方式相当消耗计算资源,因为每次查询 dom 几乎都需要遍历整颗 dom 树,如果建立一个与 dom 树对应的虚拟 dom 对象( js 对象),以对象嵌套的方式来表示 dom 树及其层级结构,那么每次 dom 的更改就变成了对 js 对象的属性的增删改查,这样一来查找 js 对象的属性变化要比查询 dom 树的性能开销小。
虚拟 DOM 引入最大的好处就是: 1. 组件的高度抽象化 2. 可以更好的实现 SSR,同构渲染等 3. 框架跨平台
三、虚拟DOM真的比真实DOM性能好吗
`
如果是首次渲染,虚拟Dom不具有任何优势,甚至它要进行更多的计算,消耗更多的内存。 虚拟Dom的优势在于React的Diff算法和批处理策略,React在页面更新之前,提前计算好了如何进行更新和渲染DOM。 所以,虚拟Dom帮助我们提高了开发效率,而不是一定要去比普通DOM快
虚拟dom的优势如下: 简单方便,如果使用手动操作真实dom完成页面,繁琐并容易出错,在大规模应用下维护起来也很困难。 性能方面,使用virtualDom能够有效避免真实dom树的频繁更新,减少重绘和回流提高性能。 跨平台,react借助虚拟dom带来了跨平台的能力,一套代码多端运行。 缺点:是因为首次渲染大量dom,由于多一层虚拟dom计算,速度比正常稍慢。
四、说说你对JSON的理解
JSON 是轻量级的文本数据交换格式,JSON 使用 Javascript语法来描述数据对象,支持多种语言,并且具有自我描述性,更易理解. JSON 非常适合ajax 因为是它使 JavaScript 对象和字符串值之间得以快速转换 JSON是一种传递对象的语法,同时parse将符合json标准的字符串转化为js对象
五、说说你对浅拷贝和深拷贝的理解,及各自常见的实现方式
浅拷贝:
将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用
Object.assign 扩展运算符 Array.prototype.concat Array.prototype.slice 使用第三方库&手动实现
深拷贝:
不管原数据中值是什么类型的数据,拷贝后的新数据跟原数据是相互独立,没有关联的实现方法 1.利用json数据和json字符串之间的转换 2.$.extend() 3.递归