学习前端面试知识(16)

computed和watch

参考文章vue

computed

  • 计算属性,有缓存功能,底层通过dirty来判断是否重新计算,只有在依赖数据发生变化时才会重新计算,性能更好。
  • 不能进行异步操作。
  • 缓存属性受多个属性影响,比如购物车商品结算
  • 函数必须要用return返回
  • 默认第一次加载的时候开始监听

watch

  • 没有缓存属性
  • 能执行异步操作
  • 适用于一对多,也就是监听的属性影响多个属性,比如搜索框搜索
  • 不一定要用return
  • 默认第一次加载不做监听

Vue3性能提升主要是通过几个方面体现的

参考的boss上的回答

  • 响应式提升。
    • vue2在初始化的时候,使用defineProperty调用getter和setter将data中的每个属性变为响应式对象,如果属性为对象,会递归调用defineProperty使之变成响应式对象。
    • vue3使用proxy对象重写响应式,proxy可以拦截属性的访问,赋值和删除等操作,不需要初始化的时候遍历所有属性,有多层属性嵌套的话只有访问某个属性的时候才会递归处理下一级。
    • 优势:可以监听动态新增的属性,监听删除的属性,监听数组的索引和length属性
  • 编译优化
    • vue2通过标记静态根节点,优化diff算法,vue3标记和提升所有静态根节点,diff的时候只比较动态节点内容
    • 静态提升。当使用hoistStatic时,所有静态的节点都被提升到render方法之外,只会在应用启动的时候创建一次,之后的使用只需要应用提取的静态节点,随着每次的渲染不停的复用
    • patch flag。在动态标签末尾加上相应的标记,只能带patchFlag的节点才能被认为是动态的元素,会被追踪属性的修改,能快速找到动态节点而不用逐层遍历,提高细腻dom diff的性能
    • 缓存事件处理函数cacheHandler。避免每次触发都要重新生成全新的function去更新之前的函数,减少不必要的代码量
  • Composition Api和Vue2使用的Option Api区别
    • composition Api
      • 包含一个描述组件选项(data,methods,props等)的对象options
      • 使用mixin重用公用代码,有命名冲突,数据来源不清晰等问题
    • Option Api
      • vue3中新增的一组api,基于函数,更灵活,解决options api在大型项目中不好拆分和重用的问题

vue3响应式系统的实现原理

  • reactive
    • 设置对象为响应式对象,接收一个参数,判断参数是否是对象,不是对象直接返回这个参数,不做响应式处理,是的话创建拦截器handerler,设置get/set/deleteproperty
    • get 收集依赖(track),如果当前key的值是对象,则为当前key的对象创建拦截器handler,不是对象就返回当前key的值
    • set 设置的新值和老值不相等时更新为新值,并触发更新(trigger)。当前对象有这个key的时候删除这个key并触发更新trigger
  • effect
    • 接收一个函数作为参数
    • 访问响应式对象属性时收集相关的依赖
  • track
    • 接收两个参数target和key
    • 如果没有 activeEffect,则说明没有创建 effect 依赖
    • 如果有 activeEffect,则去判断 WeakMap 集合中是否有 target 属性
    • WeakMap 集合中没有 target 属性,则 set(target, (depsMap = new Map()))
    • WeakMap 集合中有 target 属性,则判断 target 属性的 map 值的 depsMap 中是否有 key 属性
    • depsMap 中没有 key 属性,则 set(key, (dep = new Set())) -depsMap 中有 key 属性,则添加这个 activeEffect
  • trigger
    • 判断WeakMap中是否有target属性,weakMap中有target属性,则判断target属性的map值中是否有key属性,有的话循环触发收集的effect

js是单线程的,为什么能有异步任务?

boss看到个通俗易懂的回答,记录一下。

  • 把JS认为是项目经理,然后开始安排任务:
      1. http这个员工去帮我请求个网页,url 告诉你了,干完告诉我一声
      1. fs 这个员工去帮我读取个文件,path告诉你了,干完告诉我一声
    • 于是 http fs 等底层员工会用自己进程或者线程去做这些任务。等这俩真正干活做完后,给 JS 说一声我干完了,这个时候项目经理如果有时间,就会把你的劳动成果传达给下一个人,如果没时间就先排着。
    • 说白了,让项目经理直接干这些事也是可以的,就是干的慢一点,但是如果只做调度,就会充分发挥其他小伙伴的价值。
  • 术语回答:运行JS的容器是单线程,在同一刻,不可能同时跑两个while循环,但是可以调度其他线程或者进程模块执行任务。JS主要干的事情都是注册事件或者简单的任务,擅长IO密集型任务,不擅长CPU密集型任务。

axios常用的请求方式

  • get获取数据
  • post提交数据(表单提交,文件上传)
  • put更新数据(所有数据推送到后端)
  • patch更新数据(只将修改的数据推送到后端)
  • delete删除数据
  • 用的比较多的就get和post
相关推荐
cuisidong19972 分钟前
5G学习笔记三之物理层、数据链路层、RRC层协议
笔记·学习·5g
南宫理的日知录10 分钟前
99、Python并发编程:多线程的问题、临界资源以及同步机制
开发语言·python·学习·编程学习
我要洋人死39 分钟前
导航栏及下拉菜单的实现
前端·css·css3
科技探秘人1 小时前
Chrome与火狐哪个浏览器的隐私追踪功能更好
前端·chrome
科技探秘人1 小时前
Chrome与傲游浏览器性能与功能的深度对比
前端·chrome
JerryXZR1 小时前
前端开发中ES6的技术细节二
前端·javascript·es6
七星静香1 小时前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
q2498596931 小时前
前端预览word、excel、ppt
前端·word·excel
数据与后端架构提升之路1 小时前
从神经元到神经网络:深度学习的进化之旅
人工智能·神经网络·学习
小华同学ai1 小时前
wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器
前端·钉钉·飞书