在 11 月 14 日 - 16 日于多伦多举办的 vueConf TO 2018 大会上, 尤雨溪发表了名为 "Vue 3.0 Updates" 的主题演讲, 对 Vue 3.0 的更新计划, 方向进行了详细阐述. 目前该演讲的 PPT 也已上传至 Google 文档, 感兴趣的可点此查阅 https://t.co/hqICsxIUCp . 本次版本主要围绕以下几个版本来升级:
更快
更小
更易于维护
更多的原生支持
更易于开发使用
...
完整的 ppt 地址: https://link.juejin.im/?targe...
更快
Virtual DOM 完全重写, mounting & patching 提速 100% ;
更多编译时 (compile-time) 提醒以减少 runtime 开销;
基于 Proxy 观察者机制以满足全语言覆盖及更好的性能;
放弃 Object.defineProperty , 使用更快的原生 Proxy ;
组件实例初始化速度提高 100% ;
提速一倍 / 内存使用降低一半.
为了让 Vue 3.0 更快, Vue 开发小组做了如下的一些改进:
重写虚拟 DOM (Virtual DOM Rewrite)
随着虚拟 DOM 重写, 我们可以期待更多的 编译时 (compile-time) 提示来减少 运行时 (runtime) 开销.
优化插槽生成(Optimized Slots Generation)
在当前的 Vue 版本中, 当父组件重新渲染时, 其子组件也必须重新渲染. 使用 Vue 3 , 可以单独重新渲染父组件和子组件.
静态树提升(Static Tree Hoisting)
使用静态树提升, 这意味着 Vue 3 的编译器将能够检测到什么是静态组件, 然后将其提升, 从而降低了渲染成本.
静态属性提升(Static Props Hoisting)
此外, 静态属性的提升, Vue 3 将跳过不会改变节点的打补丁过程.
基于 Proxy 的观察者机制
目前, Vue 的反应系统是使用 ObectDefineProperty 的 getter 和 setter. 但是, Vue 3 将使用 ES2015 Proxy 作为其观察者机制. 这消除了以前存在的警告, 使速度加倍, 并节省了一半的内存开销.
更小
Tree-shaking 更友好;
新的 core runtime: ~10kb gzipped
Vue 已经非常小了, 在运行时 (runtime) 压缩后大约 20kb . 但我们可以期待它会变得更加小, 新的核心运行时压缩后大概 10kb . 这将在很大程度上通过消除不使用的库 (也称为 Tree Shaking) 来实现.
更易维护
- Flow -> TypeScript
- Decoupled Packages(解耦包)
编译器重写
虽然大多数 Vue 开发人员都没有在库本身上工作, 但很高兴知道 Vue 3 将带来更多可维护的源代码. 它不仅会使用 TypeScript , 而且许多软件包将被解耦, 使所有内容更加模块化.
更多的原生支持
运行时内核也将与平台无关, 使得 Vue 可以更容易地与任何平台 (例如 web,iOS 或 Android) 一起使用, 从而更好的支持跨平台开发.
让开发者使用更轻松
Exposed reactivity API
轻松识别组件重新渲染的原因
改进 TypeScript 以支持 w/TSX
改进警告追踪
- Experimental Hooks API
- Experimental Time Slicing Support
支持 IE11
Exposed reactivity API
Observer 模块已被解压缩到自己的包中, 允许您以新的方式使用它.
轻松识别组件重新渲染的原因
跟踪重新渲染的位置也会更容易. 在 Evan 的演讲中, 他做了一些实时编码, 并展示了如何跟踪 Vue 应用程序 (使用下面的代码) 来找出触发组件重新渲染的内容. 这在更大的应用程序和性能微调中非常有用.
改进 TypeScript 以支持 w/TSX
Vue 3.0 还会改进对 TypeScript 的支持, 允许在编辑器中进行高级的类型检查和有用的错误和警告.
实验性的 Hooks API
当我们需要在 Vue 中共享两个组件之间的行为时, 我们通常使用 Mixins . 然而, Evan 正在尝试使用 Hooks API 来避免来自 Mixins 的一些问题, 并且更适合使用惯用的 Vue 代码.
实验性的 Time Slicing 支持
当您有许多组件同时尝试重新渲染时, 任何浏览器都可以开始变得很慢, 从而使用户体验下降.
Evan 展示了他如何尝试使用 Time Slicing, 将 JS 的执行分解为几个部分, 如果有用户交互需要处理, 这些部分将提供给浏览器.
不得不说, vue.js 3.0 版本将发生质的变化, 继续朝着更快, 更小, 更易于管理和更利于开发者的目标前进, 并且部分借鉴了 React 的相关思想, 正所谓 "变即是不变".
参考: 英文原文
Vue.JS 3.0 PPT https://juejin.im/post/5bed9c31e51d4516f64d528a
来源: https://segmentfault.com/a/1190000017187508