Part3-5-1 vue3.0

Posted 沿着路走到底

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Part3-5-1 vue3.0相关的知识,希望对你有一定的参考价值。

Composition API

RFC (Request For Comments)

        https://github.com/vuejs/rfcs

Composition API RFC

        https://composition-api.vuejs.org

设计动机

Options API

  • 包含一个描述组件选项(data、methods、props等)的对象
  • Options API 开发复杂组件,同一个功能逻辑的代码被拆分到不同选项

Options API Demo

Composition API

  • Vue.js 3.0 新增的一组 API
  • 一组基于函数的 API
  • 可以更灵活的组织组件的逻辑

Composition API Demo

下图相同色块代表同一功能

性能提升

响应式系统升级

编译优化

源码体积的优化

响应式系统升级

Vue.js 2.x 中响应式系统的核心 defineProperty

Vue.js 3.x 中使用 Proxy 对象重写响应式系统

  • 可以监听动态新增的属性
  • 可以监听删除的属性
  • 可以监听数组的索引和 length 属性

编译优化

vue2编译执行的过程: 

模板首先需要先编译成 render 函数,这个过程一般是在构建的过程中完成的。

在编译的时候,会编译静态根节点和静态节点,静态根节点要求必须有一个静态子节点。

当组件的状态发生变化后,会通知 Watch,触发 Watch 的 update,最终去执行 虚拟Dom 的 patch 操作。

遍历所有的虚拟节点,找到差异,然后更新到真实Dom上。

Diff 的过程中,会去比较整个虚拟Dom,先对比新旧节点以及它的属性,然后再对比它内部的子节点。

Vue2 中,渲染的最小单位是组件。

Vue.js 2.x 中通过标记静态根节点,优化 diff 的过程, 也就是diff的过程会跳过静态根节点,因为静态根节点的内容不会发生变化。但是静态节点还需要再进行diff,这个过程没有被优化。

Vue.js 3.0 中标记和提升所有的静态根节点和静态节点,diff 的时候只需要对比动态节点内容

  • Fragments (升级 vetur 插件)vue3中引入了片段的特性。不需要再创建一个唯一的根节点,模板里面可以直接放文本内容,或者很多同级的标签。
  • 静态提升
  • Patch flag
  • 缓存事件处理函数

优化打包体积

Vue.js 3.0 中移除了一些不常用的 API

例如:inline-template、filter等。filter可以通过method或者计算属性来实现。

Tree-shaking

Vite as Vue-CLI

Vite 在开发模式下不需要打包可以直接运行

因为在开发模式下,Vite使用浏览器原生支持的ESModule加载模块,也就是通过import来导入模块,通过 script 标签 type="module" 的方式来加载代码,因为Vite不需要打包项目,因此Vite在开发模式下打开项目是秒开的。

Vue-CLI开发模式下必须对项目打包才可以运行

Vite 在生产环境下使用 Rollup 打包

基于ESModule的方式打包,不需要再使用Babel把import转换成require以及一些相应的辅助函数,因此打包的体积会比webpack打包的体积更小。

Vue-CLI使用Webpack打包

Vite 特点

快速冷启动

按需编译

模块热更新

Vite 创建项目

 

1

以上是关于Part3-5-1 vue3.0的主要内容,如果未能解决你的问题,请参考以下文章

链接3.0:Ardor 3.0架构助力Web 3.0生态发展

MongoDB 3.0:CentOS7 安装MongoDB 3.0服务

Net Core 3.0 及 AspNet 3.0

从 [x=1.0][y=1.0] 到 [x=3.0][y=3.0] 的关系的时间值不存在

Gradle plugin 3.0 & Android Studio 3.0

《转》CentOS7 安装MongoDB 3.0server (3.0的优势)