Vue基础面试题(三)

1.Vue3.0有什么更新

  • 响应式原理改成了用proxy,解决了数组无法通过下标修改,无法监听到对象属性的新增和删除问题。
  • 通过reactive定义的响应式数据是使用proxy包装的,而ref还是用的defineProperty给空对象定义一个value属性来实现响应式。
  • 组合式api的写法,方便按需引入,打包的体积更小。
  • 增加了静态节点标记,会标记静态节点,不对静态节点进行对比,从而增加效率。
  • 重写了内部结构,对TypeScript的支持更加完善。
  • 去掉了vue2.0中的 beforeCreate 和 created 两个阶段,新增了一个setup。destroyed 销毁后被重命名为 unmounted卸载后
  • 新增组件Teleport(传送),它可以将包裹组件传送到任何指定地方,且不改变组件内部的元素父子关系()主要应用于弹窗。

2.defineProperty和proxy的区别

  • Vue 在实例初始化时遍历 data 中的所有属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter。这样当追踪数据发生变化时,setter 会被自动调用。(无法监控到数组下标和长度的变化,ES5中的写法)
  • proxy用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等),Proxy 直接代理整个对象而非对象属性。(Proxy 可以监听数组的变化。 )

3.Vue3.0 为什么要用 proxy?

相较于Object.defineProperty有着改进和优势

  • 能监听到对象的所有的所有操作。
  • 对数组的所有操作都可以捕获,包括数组长度和索引访问。
  • 性能提升(拦截操作时无需遍历整个对象)

4.对虚拟DOM的理解?

  • 虚拟DOM是对DOM的抽象,这个对象是更加轻量级的对 DOM的描述,虚拟DOM本身是js对象,当组件的状态变化时,框架会生成一个新的虚拟DOM 树,框架比较新旧虚拟 DOM 树,找到其中的差异,根据差异,框架将最小化的更新应用到真实 DOM,虚拟 DOM 的主要优势在于它能够减少直接 DOM 操作的频率和复杂性,从而提高性能和开发效率。

5.虚拟DOM的解析过程

将 JavaScript 对象表示的虚拟 DOM 转换为实际的 DOM 元素,并根据应用的状态变化高效地更新视图。

  • 首先对将要插入到文档中的 DOM 树结构进行分析,使用 js 对象将其表示出来。
  • 当应用状态发生改变时,触发重新渲染,框架会生成新的虚拟DOM树。
  • 将新生成的虚拟DOM树与之前的虚拟DOM树进行比较,找出两者之间的差异,也就是需要更新的部分。
  • 算出需要进行更新的最小操作集,以减少对实际DOM的操作次数。
  • 将计算出的更新操作批量应用到实际的DOM上,从而使得页面呈现最新的状态。

6. 虚拟DOM真的比真实DOM性能好吗

取决于具体的情况。在某些情况下,虚拟DOM的性能可能会比真实DOM差,例如,当我们的应用程序的状态变化非常频繁时。但是,总的来说,虚拟DOM的性能是比真实DOM好的。

  • 首次渲染大量DOM时,由于多了一层虚拟DOM的计算,会比innerHTML插入慢。
  • 虚拟DOM可以将多次状态变更合并为一次更新,从而减少对实际DOM的频繁操作。

7.DIFF算法的原理

diff 算法的核心思想是比较新旧虚拟 DOM 树(递归+双指针算法),找出差异,并生成最小的操作集合(最小化更新视图),以最有效的方式将这些差异应用到真实的 DOM 上。比较只会在同层级进行, 不会跨层级比较

  • 首先,对比节点本身,判断是否为同一节点,如果不为相同节点,则删除该节点重新创建节点进行替换。如果节点相同(进行patchVnode),则进一步比较属性和子节点。
  • 递归地比较和更新子节点,利用键值优化来高效地匹配和复用节点,减少不必要的 DOM 操作。
  • 找出新旧节点属性的差异,删除旧属性中不再需要的部分,添加或更新新的属性。
  • 如果都有子节点,则进行updateChildren,判断如何对这些新老节点的子节点进行操作。

8. Vue中key的作用

key属性是DOM元素的唯一标识。

  • Vue 会根据 key 来追踪和比较节点的位置和状态,可以更高效地进行节点的对比和更新,避免不必要的 DOM 操作。
  • v-for中使用key,可以方便Vue跟踪元素的身份,从而高效实现复用,高效更新渲染虚拟DOM。
  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一些关于Vue的经典基础面试题的回答: 1. 前端采用的语言为HTML、CSS和JavaScript前端采用的框架是Vue.js。后端采用的语言为Golang,后端采用的框架为Gin。 2. Vue-router的动态路由是指根据传递的参数动态生成路由。获取传过来的值可以使用$route对象中的params属性或query属性来获取。 3. Vue-router有种导航钩子:全局前置守卫、全局解析守卫和全局后置钩子。全局前置守卫通过router.beforeEach()方法来定义,在跳转之前执行。全局解析守卫通过router.beforeResolve()方法来定义, 在解析路由之前执行。全局后置钩子通过router.afterEach()方法来定义,在跳转之后执行。 4. v-model是Vue.js中的指令,用于在表单元素和Vue实例的数据之间建立双向绑定。它可以通过v-model指令将表单输入和Vue实例的数据属性进行双向绑定,实现数据的实时同步。 5. Axios是一个基于Promise的HTTP客户端库,用于发送HTTP请求。使用Axios可以通过发送GET、POST等请求与后端进行数据交互。实现登录功能的流程可以通过发送POST请求向后端发送用户的登录信息,然后根据后端返回的响应进行相应的处理,比如跳转到登录成功页面或者显示登录失败的提示信息。 这些是关于Vue的经典基础面试题的回答。希望对你有帮助!<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [go语言恶意代码检测系统-对接前端可视化与算法检测部分](https://download.csdn.net/download/liufang_imei/88222624)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [vue面试题基础面试题](https://download.csdn.net/download/weixin_42979948/88222466)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值