尤小右-Vue3新特性

2,359 阅读5分钟

👐没有人🙌比我👌更懂👆vue

如何获取vue最新进展?

  • 如果你想了解最新进展,RFC仓库是最直接的来源。
  • Beta阶段主要关注点是第三方库的支持和功能性的支持,并不对用户开放

亮点

  • 性能比vue2快很多,特别是编译时
  • tree-shiking支持(v-model等等支持tree-shaking,渐进式plus!)
  • Composition API:尤大好像并没用想好这个东西中文名咋读,mixin,88
  • Fragment,Teleport,Suspense
  • 加强TS支持(尤大说不意味着你就得用ts,想用啥还是用啥就可以,他并不认为ts能够完全取代JS,弱类型语言的简便性是其优势,在小型项目里)
  • 暴露了自定义渲染API

亮点1:性能方面:

  • 重写了虚拟Dom的实现(且保证了兼容性,脱离模版的渲染需求旺盛)。
  • 编译模板更快
  • 更高效的组件初始化。
  • update性能提高1.3~2倍。
  • SSR速度提高了2~3倍。

*图片仅供参考,一切以实物为准

重写虚拟DOM的实现

vdom 的运行时:

  • 向下兼容
  • vdom并不让原生dom操作更快,而是使得开发者能够根据自己的想法操作DOM。
  • vue3通过编译器和运行时的结合,只对非静态节点进行替换,性能提升很大,
  • 启动性能提升了1.3-2倍
  • 模板编译到服务器渲染生成了不同的renderFunction

新版算法最小程度的变化

动态节点直接和根节点绑定,不会遍历那些不会变化的静态节点。 diff时永远只关注动态的,这样既有reactJSX的灵活性又有基于模板模板的性能保证。 更新时不需要创建一大堆的对象然后销毁掉。

update性能提高

  • cachehandlers:直接从内存读取,并且可以在click直接手写()=>foo() 如果给组件传入一个内联函数,

SSR渲染

  • 如果template内容过大,直接转成字符串,字符串不整那些花里胡哨,能不快?

性能和vue2的对比

亮点2:tree-shaking

vue3支持tre-shaking,使得v-model,transtion等等函数支持tree-shaking。当然响应式相关部分和vdom更新算法不能加入tree-shaking,没有用到的一些函数代码的会被tree-shaked掉。后续可能会提供一个编译时开关,去掉对2.0语法的支持,做到更纯粹的渐进式。

亮点3:composition API

zhuanlan.zhihu.com/p/68477600 composition-api.vuejs.org/#summary 文化水平有限,提供给各位大神看。 与React Hooks 类似,但是实现方式不同

  • 百分之90的vue2的optionsAPI代码,不影响vue3。
  • 对于抽取复用逻辑,以后就别用mixin了。阅读性忒差了。
  • vue 3的响应式模块可以和其他框架搭配使用

核心6个API+生命周期。 其他的API依据lodash编写(不知道是不是以后就不用引Lodash了?)

亮点4:Fragments Teleport Suspense

Fragments

  • 模板不需要只有一个根节点,他可以是任意类型,他会自动变成碎片
  • render 函数也可以返回数组了,类似实现了 React.Fragments 的功能 。

teleport

对标的react的portal,但是因为一些命名冲突问题所以起这个名字。chrome可能增加一个protal的原生API,(chrome啥时候良心发现支持一下数据驱动呗~)

suspense

  • React16里引入的,但是比react更轻,vue不会做一些很重的运行时的调度,react无法treeshaking

亮点5:更强的TS支持

  • TS重写并不代表用户需要使用TS写。当然使用了TS能享受更多好处。
  • 并且支持TSX风格的编程风格,
  • 不太推荐使用class,你爱用也行(尤大原话),提供了相应的模块vue-class-component@next,但是这个模块还没完善。
  • vue官方的TS的类型检测插件,以后会整合到vscode的插件商店,

亮点6:自定义API

就是一个内置的API。

  • rigor789正在进行NativeScript Vue集成
  • 用户可以尝试WebGL自定义渲染器,与普通Vue应用程序一起使用(Vugel)。

接下来还有什么要做的?

  • 官方文档的编写、自动升级、指导
  • vue-router新版本的编写
  • vuex新版本的编写
  • cli编写
  • vite使用

Router有一些改动

vuex next并没有太大的改动

vuex

vuecli

已经有了cli

vite

github.com/vuejs/vite

尤雨溪:

  • Vite,一个基于浏览器原生 ES imports 的开发服务器。利用浏览器去解析 imports,在服务器端按需编译返回,完全跳过了打包这个概念,服务器随起随用。同时不仅有 Vue 文件支持,还搞定了热更新,而且热更新的速度不会随着模块增多而变慢。针对生产环境则可以把同一份代码用 rollup 打包。虽然现在还比较粗糙,但这个方向我觉得是有潜力的,做得好可以彻底解决改一行代码等半天热更新的问题。
  • VitePress 确认可行,彻底解决 VuePress 启动和热更新过慢的问题 尤雨溪现在正在做的:vite:一个http服务器。不需要打包编译,起一个服务器就可以写vue文件了,并且支持模板和热更新,热更新不需要整个打包(webpack项目太大时更新特别慢)。

DevTools。

Vetur

Nuxt 也正在做

2.x版本??

会把3.0里一些不损害2.0的代码兼容进2.7里。 我不建议升级成本,如果你的项目很稳定,不太建议你升级,能悠着点就悠着点。

问题回答

是否兼容ie11?

会有一个单独的支持ie11的版本,有基于getter和setter的响应侦测。但是有一些例如添加删除,对数组index修改的,他们不支持,我们的做法是开发时做出警告。

什么时候可以投入使用?

生成项目不要上,小项目可以试水。真正可以投入生成使用,最低得到年终(中)?

语法的改动?

模板语法0改动,compositionAPI和optionsAPI同时存在,vue3的compositionAPI更多面向于类库和高级的作者,因为他提供了更好的表达力