3在保留了2的一些特点的基础之上,做了一些优化
保留的2的特点大概有三个
第一个 声明式框架
就是用起来很简单的一个框架,对应的是命令式框架。两个框架的区别在于神明式不关心怎样实现的 命令式是关心怎样实现的,reduce就是声命式方法
第二个 虚拟dom
1.0里面是没有虚拟dom的 为了提高性能2.0里面引入了虚拟dom 有了虚拟dom就可以在跟新的时候做上了diff算法 这样可以只跟新有差异的部分 有了虚拟dom,可以操作虚拟dom 比对差距后再对真实dom进行操作。虚拟dom就是一个对象。 缺陷:结构很复杂的时候是不建议的
第三个 区分编译时和运行时
打包的时候把模版变成函数 在浏览器运行的时候只需要调用函数返回虚拟dom 运行时就不需要把模版变成虚拟dom了
2做的不详细 只是简单判断了一下哪些节点时静态节点
但是3中做了很多 会看哪些属性是动态的哪些元素是动态的
做的优化大概有3个方面
第一个 模块拆分
vue3将模块度拆分开了 拆分成一个一个的独立模块 可以单独使用某个模块 比如就想用某个功能那就只导入某个包就好了
第二个 重写api
vue2中的api都是放在构造函数上或者是实例上的 意味着是检测不到用户有没有用到 统一都给打包到一起了 这是2的一个缺陷
vue3利用构建工具tree-shaking实现按需导入 减少了用户打包后的体积 用不到就干掉
第三个 自定义渲染器
可以基于vue编写很多不同的平台