Vue 面试常见考点总结

152 阅读4分钟

1.前端开发中,在项目中如何进行项目优化

  1. 在图片上面的优化
  • 对于一些项目logo,小图标(图片小于8k)可以转化为base64格式
  • 好处就是浏览器不用发请求了,直接可以读取
  • 坏处就是如果图片太大,再转base64就会让图片的体积增大 30% 左右
  1. vue中涉及到本地图片加载时
  • 可以用require的方式引入图片,当使用到它的时候才会按需加载,而不会像import引入那样在页面创建时就会加载,加快页面初次加载效率
  1. vue中按键修饰符的使用也会优化代码
  • vue中按键修饰符只会处理当前按键的函数处理数据逻辑,避免了通过查询阿斯克码操作按键函数后操作其他函数

2.说一下computed 和 watch 的区别

  • computed计算属性该属性的结果会被缓存,当computed中的函数所依赖的属性没有发生改变的时候,那么调用当前函数的时候结果会从缓存中读取。除非依赖的响应式属性变化时才会重新计算,主要当做属性来使用computed中的函数必须用return返回最终的结果,computed更高效,优先使用,
  • watch属性监听是一个对象,键是需要观察的属性,值是对应回调函数,主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作,监听属性的变化,需要在数据变化时执行异步或开销较大的操作使用。

使用场景: computed当一个属性受多个属性影响的时候使用,例:购物车结算功能; watch当一条数据影响多条数据的时候使用,例:搜索数据。

3.如何理解Vue中的diff算法?

在js中,渲染真是DOM的开销是非常大的,比如我们修改了某个数据,如果直接渲染到真实DOM ,会引起整个DOM树重绘和重排。那么有没有可能实现只更新我们修改的那一小块DOM二不要更新整个DOM呢?此时我们就需要先根据真实DOM生成虚拟DOM,当虚拟DOM某个节点的数据改变后会生成有一个新的VNode,然后新的VNode和旧的VNode作比较,发现有不一样的地方就直接修改在真实DOM上,然后旧的VNode的值为新的VNode

diff的过程就是调用patch函数,比较新旧节点,一边比较一边给真实的DOM打补丁,在采用diff算法比较新旧节点的时候,比较自会在同层级进行。

4.你对虚拟DOM的理解?

虚拟DOM本质上是JavaScript对象,是对真实DOM的抽象表现。状态变更时,记录新树和旧树的差异,最后把差异更新到真正的domrender函数

  1. 根据tagName生成父标签,读取props,设置属性, 如果有content,设置innerHtml或innerText
  2. 如果存在子元素,遍历子元素递归调用render方法,将生成的子元素依次添加到父元素中,并返回根目录;

5.nextTick实现原理

  1. nextTickvue提供的一个全局API,是下次DOM更新循环结束之后执行延时回调,在修改之后使用$nextTick,则可以再回调中获取更新后的DOM

  2. vue在更新DOM时是异步执行。只要侦听到数据变化,vue将开启1个队列,并缓存在同一事件循环中发送的所有数据变更。如果同一个watcher被多次触发,只会推入到队列中1次。这种在缓冲时去除重复数据对于避免不必要的计算和DOM操作非常重要的。nextTick方法会在队列中加入一个回调函数,确保该函数在前面的DOM操作完成后才调用

6.第一次加载页面会触发哪几个钩子函数?

当页面第一次页面加载时会触发 beforeCreate, created, beforeMount, mounted* 这几个钩子函数

7.一个页面从输入URL到页面加载完成,这个过程都发生了什么?

  1. 浏览器去查找域名对应的IP地址
  2. 浏览器向web服务器发送一个http请求
  3. 服务器301重定向
  4. 浏览器跟踪重定向地址,请求另一个带www的网址
  5. 服务器处理请求
  6. 服务器返回一个http响应
  7. 浏览器进DOM树构建
  8. 浏览器发送请求获取嵌在HTML中的资源(图片,js代码,音频,视频)
  9. 浏览器显示页面完成
  10. 浏览器发送异步请求