四时宝库

程序员的知识宝库

vue2中的diff算法是怎么实现的?前端基础知识。

1、什么是DOM?

DOM(Document Object Model(文档对象模型)),是网页用来表示文档中对象的标准模型,是针对HTML和XML的API。

2、浏览器渲染过程?

构建DOM树 --> 构建cssom树 --> 将DOM和cssom合并成一个渲染树 --> 布局 --> 绘制。

3、什么是重绘?

修改DOM元素的样式,但是不会影响元素的大小尺寸变化,直接可以重新绘制元素样式。

4、什么是重排?

修改DOM或修改DOM元素的尺寸大小,会发生重排。

5、怎样减少重排?

尽量少操作DOM、避免使用table布局、尽量使用className、可以使元素脱离文档流,减少渲染树的规模。

6、什么情况会发生重排?

添加或删除DOM、DOM元素的位置发生变化、DOM元素的尺寸发生变化、浏览器尺寸发生变化。

7、什么是虚拟DOM?

虚拟DOM就是将真实的节点DOM用js模拟出来。

通过状态生成一个虚拟节点树,然后使用虚拟节点树进行渲染。渲染之前,先缓存新的虚拟节点树,然后使用新的虚拟节点树和旧的虚拟节点树进行对比,只渲染不同的部分。

8、为什么要使用虚拟DOM?

(1)一个DOM节点是很庞大的,它有很多的属性,每次操作DOM都是一个相当耗时的过程。

(2)当修改一个DOM节点时,很有可能会发生重排,会导致浏览器渲染部分文档或整个文档。

(3)到对多个DOM节点进行操作时,会多次获取DOM节点的坐标位置,会造成性能的浪费。

而虚拟DOM就可以很好解决上述问题,一次操作多个DOM节点时,可以通过虚拟DOM找到最小的变化,再把这些改动写入实际的虚拟DOM,通过虚拟DOM减少了对DOM的操作,有利于性能的提升。

9、什么是diff算法?

Vue通过编译将模板转换为AST(抽象语法树),之后再将AST转换为渲染函数,执行渲染函数可以得到一个虚拟节点树(vnode),再拿新的虚拟节点树(vnode)对比旧的虚拟节点树(oldVnode),

找出更新部分的节点,最后再做渲染。

10、vue2中的diff算法是怎么实现的?

vnode和oldVnode对比的过程,也就是常说的diff算法。

11、js的数据类型

(1)普通类型:number、string、Boolean、

(2)引用类型:Array、Object

12、堆和栈的区别

栈:一般存储普通类型、读取写入速度快、存储内容少、变量不使用会被清理。

堆:一般存储引用类型、读取写入速度慢、存储内容多、一般对象会存储在堆中。

13、==与===的区别

==只判断值是否相同

===需要值和类型全部相同才为真

==先会判断两端类型是否相同,如果不同会进行隐式转换,如果一致则直接判断两个值是否相同。

14、浅拷贝和深拷贝

浅拷贝:只拷贝数值,不拷贝地址,如果改变原来对象的值,浅拷贝的值也会跟着变化。

深拷贝:地址和值都进行拷贝,拷贝的方法有JSON.parse(JSON.stringify())或for...in加递归。

15、__proto__和prototype和constructor

__proto__和constructor属性是对象所独有的。

prototype属性是函数所独有的,js中函数也是一种对象,所有函数也就所有__proto__和constructor属性。

16、var和let和const区别

var会提示变量

let和const不会进行变量提升

const初始定义不能再进行更改

17、闭包

将一个函数内部的值return出去,让函数外部也可以访问。

缺点:闭包会导致内存泄漏。

18、原型链

一个普通实例对象能够访问构造它的抽象类型原型上的方法和属性,这个抽象类型也是一个普通实例对象,它也可以访问构造它的抽象类型上的原型的方法和属性,这样一直找下去,就称为原型链。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接