前端开发 大前端 W3Cbest

一个专注 WEB 开发的技术博客

0%

Vue的基础原理

vue的设计原理

  • 渐进式的JavaScript框架:vue的核心只关注视图层,容易上手,还便于与第三方库或既有项目整合
  • 易用性:vue提供数据响应式、声明式模板语法和基于配置的组件系统等核心特性。这些使我们只需关注应用的核心业务即可。
  • 灵活性:渐进式框架最大优点就是灵活性,如果应用足够小,我们可能仅需要vue核心特性即可完成功能;随着应用规模的不断扩大,我们才可能逐渐引入路由、状态管理、vue-cli等库和工具,不管是应用体积还是学习难度都是一个逐渐增加的平和曲线。
  • 高效性:超快的虚拟DOM和diff算法使我们的应用拥有最佳的性能表现。追求高效的过程还在继续,vue3中引入Proxy对数据响应式改进以及编译器中对于静态内容编译的改进都会让vue更加高效。

vue的常见性能优化

  • 路由懒加载
  • keep-alive缓存页面
  • 使用v-show复用DOM
  • v-for遍历时避免同时使用v-if
  • 长列表性能优化,
    如果列表是纯粹的数据展示,不作任何改变,就不需要做响应化,
    如果是大数据列表,可采用虚拟滚动,只渲染可见区域内容
  • 事件的销毁,解绑全部指令及事件监听器
  • 图片懒加载
  • 第三方插件按需引入

v-model的实现原理

绑定响应数据,触发input事件并传递数据

修改computed计算属性的结果值

  • 需要通过get/set写法
  • 当前组件v-model绑定的值是computed来的,需要通过get/set写法

computed和watch的区别

对于computed

  • 计算属性的结果会被缓存,只有依赖的数据发生变化才会重新计算
  • 不支持异步,computed中有异步操作时,无法监听数据的变化
  • computed的值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的,也就是基于data声明过,或者父组件传递过来的props中的数据进行计算的。
  • 如果一个属性是由其他属性计算而来的,这个属性依赖其他的属性,一般会使用computed
  • 如果computed属性的属性值是函数,那么默认使用get方法,函数的返回值就是属性的属性值;在computed中,属性有一个get方法和一个set方法,当数据发生变化时,会调用set方法。

对于watch

  • 它支持缓存,只要数据变化时,就会触发响应的操作
  • 支持异步监听
  • 监听的函数接收两个参数,第一个参数是最新的值,第二个是变化之前的值
  • 当一个属性发生变化时,就需要执行相应的操作
  • 监听数据必须是data中声明的或者父组件传递过来的props中的数据,当发生变化时,会触发其他操作,函数有两个的参数:
    • immediate:组件加载立即触发回调函数
    • deep:深度监听,发现数据内部的变化,在复杂数据类型中使用,例如数组中的对象发生变化。需要注意的是,deep无法监听到数组和对象内部的变化。

总结

  • computed计算属性:computed的值有缓存,依赖其他属性值,只有它依赖的属性值发生变化,下一次获取computed的值时才会重新计算computed的值。
  • watch监听器:更多的是观察作用,无缓存,类似于某些数据的监听回调,每当监听的数据发生变化时,都会执行回调进行后续操作。

运用场景

  • 当需要进行数据计算,并且依赖于其他数据时,应使用computed,因为可以利用computed的缓存特性,避免每次获取值时都要重新计算。
  • 当需要在数据变化时执行异步或开销较大的操作时,应该使用watch,使用watch选项允许执行异步操作,限制执行该操作的频率,并在得到最终结果前,设置中间状态。这些都是计算属性无法做到的。
坚持技术创作分享,您的支持将鼓励我继续创作!