VueConf Hangzhou 见闻

先说分享一些自己参加 VueConf Hangzhou 的流水账见闻。


Vue 3.0

这是绕不开的话题。也是来自小右的第一个大会分享。

坦白说这部分内容我之前是有所了解的,也参与过内部讨论和之前的一些宣讲。所以听的时候心态相对比较平静。我个人觉得比较值得关注的地方是:

  1. 数据系统升级,支持新的 ES 数据类型,基于 ES Proxy/Reflect 实现,支持 reactive/immutable 两种数据结构
  2. 更友好的 virtual-DOM 底层设计
  3. 基于 ES Class 的组件定义方式
  4. 支持非源码级别的,甚至可以运行时的,定义并替换渲染器:如浏览器、Weex、(将来很可能会有) 小程序等
  5. 支持模块级维护和替换:observer, compiler, runtime-core, runtime-web, runtime-server, ...

当然其它贴心功能,包括模板支持 source map、time slicing、hooks、typescript 支持以及性能和包大小方面的进一步改进等,相信也让很多人为之兴奋。这里不一一列举。

另外分享一下我看到和理解的 Vue 3.0 相关计划背后的一些东西:

  • 为更健壮的技术核心服务:Vue 发展到今天,可能大家会有不同的解读,但我体会一个强健的核心是成败的最关键,3.0 在框架核心的健壮性方面做了很多改进,包括全部使用 ts 撰写、分多模块维护等,让更多人可以参与到核心代码工作中来,也让维护成本更低、犯错成本更高。
  • 为建设更健壮的技术生态服务:包括 virtual-DOM 底层改造和非源码级别耦合的自定义渲染器在内的改进,都可以使上层技术生态更加优质和收敛。这也有助于 Vue 开发者之间的相互交流和协作,顺便提一句 Vue 的官方文档现在除了教程和 API 之外,已经加入了更多的包括 style guide、cookbook 这样的部分,也是在为相同的目标而努力。
  • 为新技术时代的到来铺路:Vue 一直选择主动拥抱 ES Class、Proxy/Reflect、Set/Map、TypeScript、Web Components 这样的新技术,一方面在对未来作准备,同时也一定程度引导了开发者对新技术有更深刻的了解和更直观的体会。小程序算不算新技术我觉得还是有争议,但反正渲染器也可以自定义了,未来的想象空间还是很大的。

不出意外的话,接下来 3.0 会经历一个逐步迭代和打磨的过程。在这个过程中,可能还会有一些新的特性或变化产生。但总体上,我预测翻天覆地的变化不太可能出现,新版本的主体思想应该也不会变。我个人理解,近期前端开发的模式,尤其是框架这一层,有逐渐稳定的趋势,大家基本都不约而同的专注在组件系统和数据管理这两个大的部分。技术手段在语言特性本身没有 ES5、ES6 那两波重大革新和突破的前提下,也鲜有质的提升。所以这个时候上层生态的作用和意义会越来越凸显出来。这个时候,严把框架质量关 + 更多为上层生态服务是非常明智的选择。

当然再次强调这是我个人的观点和判断,接受反驳。

其它议题的感受

Vue 声明式交互能力

这个话题我之前跟分享者 寒老师 也有过私下讨论,当时讨论的内容我甚至认为要比 寒老师 会上分享的还要深入,包括延伸到了 MVVM 设计理念的一些细节,所以 Vue 模板的图灵完备性跟这些相比可能只是冰山一角了。比如我相信今天几乎每个前端工程,不仅限基于 Vue 开发的项目,都有很复杂的数据,也就是 MVVM 里的 Model 或 Flux 里的 Store,需要设计、维护和“定期治理”。我觉得从今天前端工程的角度看,MVVM 描述的有些抽象,和实际的场景和语言特性有距离;而 Flux 实践性更强,但是理论层面没有 MVVM 探讨得那么细致和严谨,所以走到某些特殊的业务逻辑的时候你还是会困惑。在和 寒老师 讨论之后,我有了一些新的思路,打算接下来花精力做一些试验。更具体的内容就要等以后有了什么新的结论再做分享了。

Vue CLI 相关

CLI 应该算是 Vue 最近一年时间里在工具层面最重要的一个发布了。在维护者 胖茶 分享的每一个设计细节中,我感触比较深的,一个是为 vue-loader 和 webpack config 解压,同时避免社区和生态在这个层面过度碎片化;另外 CLI 在项目的技术升级和配置模板等方面下了很多功夫,这是很多开发者有需求但是不敢乱动或越改越花的两个地方;最后想说 韦元悦 的闪电分享有些仓促,但有两个重点大家可能 get 到了:一个是 Vue CLI 的可扩展性是很高的,另一个是 Vue CLI 的 GUI 界面,因为随着前端工程化的发展,一个可视化的项目管理与配置变得越来越有价值了。

顺便提一下,除了 CLI,还有一个工具也值得推荐大家关注,就是 VuePress。而且这两个工具目前都是国人在维护。很赞。

Vue 生态

下午的 And Design Vue、Electron-Vue、Hippy-Vue 三个分享都是 Vue 社区和生态的部分,分别对应了组件库、桌面应用、移动应用三个大的板块。虽然大家未必都用得到,但我理解这是 Vue 社区和生态广度的一个展现。

另外两个跟 Vue 的招牌特性实践有关:SFC 和 SSR。SFC 实践的分享来自淘宝,这算是淘宝对 Vue 的一个认可吧我觉得,前东家的东西我就不做更多解读和演绎了;SSR 实践的分享我和分享者 天翔 之前也聊过一些,其实这个分享没有很多对 SSR 本身特性的介绍,更多的是探讨在 SSR 业务场景下的数据管理问题,我意识到这个话题其实和 寒老师 的话题存在着某种诡异的联系,因为本质上都是 UI 和数据打交道。同样的今天先不展开了。

最后 CRDT 这个分享的内容坦白说是在我意料之外的,第一是我没想到 ai 哥直接从 PostCSS 跳到了看上去完全不搭嘎的新领域,来以分布式的视角探讨数据交互;第二是我没想到能够学到“从 CS 学科过去几十年的积累中寻求新问题灵感”的这种方法论。它带给我的启发远远大过了 CRDT 本身。

Bonus:Hax 关于 ES 新规范的闪电分享

因为 Vue 3.0 会提供 ES class 形式的 API,所以与此相关的 ES 规范也会逐渐成为每一个 Vue 开发者关注的话题。关于 Hax 在会上提到的 ES 新规范,我个人比较明确的态度就是我不喜欢用 # 来表示私有成员,比如 this#foo。不喜欢的原因实在太多了我都不知道该从哪条开始说了,而且 Hax 基本都提到过了,我就不复述了,另外你可能会说你不喜欢就给个喜欢的啊不然还废什么话,坦白说我现在也给不出更好的方案,但我觉得如果一个新规范讨论不到够好的话,我宁愿没有这个规范,这不是一个一定要立刻有结论的事情。另外现在可能更大的问题是它眼瞅着要被通过了,我们该怎么办?这可能也是 Hax 想表达的一个很重要的点。如果你有关注规范和语言特性的习惯的话,建议多了解一下这方面的内容。

总体上,我自己觉得这次 VueConf Hangzhou 非常棒!

当然也因为自己有幸参与开场的乐队表演,而且表演了自己参与创作的歌,觉得很荣幸。

本来这篇文章的标题打算定为《VueConf Hangzhou 见闻,以及一些对技术会议的看法》,因为这次 VueConf Hangzhou 不出意外是我今年参加的最后一个技术会议了,不过写到这里发现内容已经不少了,另外也是个人时间的关系,所以打算先写到这里了。对技术会议的看法我会将来再找机会写。