在11月14日-16日于多伦多举办的 VueConf TO 2018 大会上,尤雨溪发表了名为 “ Vue 3.0 Updates ” 的主题演讲,对 Vue 3.0 的更新计划、方向进行了详细阐述。目前该演讲的 PPT 也已上传至 Google 文档,感兴趣的可点此查阅。本次版本主要围绕以下几个版本来升级:更快更小更易于维护更多的原生支持更易于开发使用…完整的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 gzippedVue已经非常小了,在运行时(runtime)压缩后大约 20kb 。 但我们可以期待它会变得更加小,新的核心运行时压缩后大概 10kb 。 这将在很大程度上通过消除不使用的库(也称为Tree Shaking)来实现。更易维护Flow -> TypeScriptDecoupled Packages(解耦包)编译器重写虽然大多数 Vue 开发人员都没有在库本身上工作,但很高兴知道 Vue 3 将带来更多可维护的源代码。 它不仅会使用 TypeScript ,而且许多软件包将被解耦,使所有内容更加模块化。更多的原生支持运行时内核也将与平台无关,使得 Vue 可以更容易地与任何平台(例如Web,iOS或Android)一起使用,从而更好的支持跨平台开发。让开发者使用更轻松Exposed reactivity API轻松识别组件重新渲染的原因改进 TypeScript 以支持 w/TSX改进警告追踪Experimental Hooks APIExperimental Time Slicing Support支持 IE11Exposed reactivity APIObserver 模块已被解压缩到自己的包中,允许您以新的方式使用它。轻松识别组件重新渲染的原因跟踪重新渲染的位置也会更容易。 在 Evan 的演讲中,他做了一些实时编码,并展示了如何跟踪 Vue 应用程序(使用下面的代码)来找出触发组件重新渲染的内容。 这在更大的应用程序和性能微调中非常有用。改进 TypeScript 以支持 w/TSXVue 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