美文网首页
Vue3.0的优化以及新特性

Vue3.0的优化以及新特性

作者: summer0125 | 来源:发表于2020-07-15 22:18 被阅读0次

一、源码优化

1. 更好的代码管理方式:monorepo

Vue.js 3.0 通过monorepo方式维护,根据功能拆分成packages目录下不同的子目录。某些package(比如:reactivity响应式库)可以单独依赖这个库,而不必依赖整个Vue.js,减少了引用包的体积大小,二Vue.js2做不到。

2. 用Typescript重构了Vue代码

Vue.js 1.x ----> javascript
Vue.js 2.x ----> javascript + flow
Vue.js 3.x ----> typescript

二、性能优化

1. 源码体积优化
  • 移除了一些冷门特性,比如filter、inline-template等
  • 引入tree-shaking技术,减少打包体积
    tree-shaking原理:依赖ES2015模块语法静态结构(即import 和 export),通过编译阶段的静态分析,找到没有引入的模块并打上标记。然后压缩阶段利用uglify-js、terser等压缩工具真正地删除这些没用的代码。
    如果项目中没有引用Transition、KeepAlive等组件,那么打包就会移除,从而减少项目引入Vue.js体积
2. 数据劫持优化

Vue.js 1.x 和Vue.js 2.x

Object.defineProperty(data, 'a', {
  get() {
    // track
  },
  set() {
    // trigger
  }
})

缺点:

  1. 不能监测到对象的添加和删除,通过$set、$delete实例方法实现
  2. 不能数组基于下标的修改、对于 .length 修改的监测
    3.不支持 对 Map、Set、WeakMap 和 WeakSet类型
  3. 潜逃层级比较深的对象,无法判断到你到底访问到哪个层级,就需要递归遍历对象,执行Object.defineProperty把每一层对象数据都变为响应式,性能消耗大
    Vue.js 3.x
observed = new Proxy(data, {
  get(target, key) {
    // 截所有对源对象属性的访问动作
    // track
  },
  set(target, key, value) { // 包括添加和修改
    // 拦截所有对源对象属性的设置动作
    // trigger
  },
  has() {
    // in运算符
  },
  apply() {
    // 拦截函数的调用、call和apply操作
  },
  deleteProperty() {
    // 删除属性
  },
  defineProperty() {
    // 拦截
  },
  construct() {
    // 用于拦截new命令
  },
  getOwnPropertyDescriptor() {
    // 拦截Object.getOwnPropertyDescriptor()
  },
  getPrototypeOf(target) {
    // 拦截获取对象原型
    // Object.getPrototypeOf(p)  === proto
  },
  isExtensible() {
    // 拦截Object.isExtensible操作
  },
  ownKeys(target) {
    // 拦截对象自身属性的读取操作
    // 注:有三类属性会被 ownKeys方法自动过滤:
    // ·目标对象不存在的属性
    // ·属性名为Symbol值
    // ·不可遍历的属性
    return Reflect.ownKeys(target).fliter(key => key[0] !== '_'); // 注:ownKeys方法返回的数组成员只能是字符串或 Symbol值.
  },
  preventExtensions() {
    // 拦截Object.preventExtensions()
  },
  setPrototypeOf(){
    // 拦截Object.setPrototypeOf()
  }
})

优点:

  1. 对于增加和删除都能监测到
  2. Proxy API不能监听深层次对象变化,那么Vue.js 3.0处理方式是在getter中去递归响应式,即只能在真正访问到的内部对象才会变成响应式(惰性监测)

三、编译优化

template compile to render function阶段可以借助vue-loader在webpack编译阶段离线完成
那么耗时更多的patch阶段优化:通过编译阶段对静态模版的分析,编译生成Block Tree,只把绑定数据的动态节点加入嵌套区块数据,每个区块以数组追踪
*vNode更新性能和动态内容的数据相关

四、语法API优化: Composition API

1. 优化逻辑组织

Vue1.x和Vue2.x编写组件本质为:编译一个包含描述组件选项的对象,称为:Options API
通常包含:props、methods、data、computed、watch(都是在initState函数中被初始化)
Composition API:将某个逻辑关注点相关的代码全部放在一个函数里,这样修改一个功能时,就不需要在文件中跳来跳去

2. 优化逻辑复用

Vue.2.x 中用mixins去复用逻辑
后续补充======>

引入RFC(Request For Comments):使每个版本改动可控

相关文章

  • Vue3.0的优化以及新特性

    一、源码优化 1. 更好的代码管理方式:monorepo Vue.js 3.0 通过monorepo方式维护,根据...

  • Vue3.0 Beta

    Vue3.0 Beta新特性以及优化变更 全新文档RFCs 3.0Beta发布后工作重点保证稳定性和推进各类库生成...

  • Vue3.0 性能优化及新特性

    Vue3.0的六大亮点: 性能 Tree-shaking 支持 Composition API Fragment、...

  • Vue3.0 新特性

    Vue3.0 在去年9月正式发布了,也有许多小伙伴都热情的拥抱Vue3.0,这篇文章就是在使用后的一个总结, 包含...

  • vue3.0 新特性

    1.需要使用什么属性就在script标签内引入 2.全局引入 通过globalProperties将参数挂载在全局...

  • vue3新特特性

    Vue3.0新特性 性能双向响应原理由Object.defineProperty改为基于ES6的Proxy,使其颗...

  • Vue3.0新特性以及使用经验总结

    写在最前:本文转自掘金[https://juejin.cn/post/6940454764421316644] C...

  • 2019-07-26

    优化器新特性 优化器具有一些新特性,主要是重新排序join和自动mapjoin。 (1)重新排序join (2)自...

  • 杂记

    解决浮点数: Vue3.0新特性 https://www.jianshu.com/p/2c20ea71fd40ht...

  • 2022秋招vue面试题+答案

    2021秋招vue面试题+答案 vue视频教程系列: Vue3.0新特性教程 视频课程:点击观看[https://...

网友评论

      本文标题:Vue3.0的优化以及新特性

      本文链接:https://www.haomeiwen.com/subject/iwzjhktx.html