01:04:04
Vue.js创始人Evan You在访谈中分享了框架的诞生故事、Vue 3的设计哲学、Vite的敏捷开发理念,以及新公司Void Zero打造统一JavaScript工具链的愿景。
Evan You的职业生涯起点并非计算机科学。他本科攻读艺术史,随后在帕森斯设计学院(Parsons)获得了设计与技术专业的艺术硕士学位(MFA)。该课程让他接触到OpenFrameworks(C++)、Processing和Arduino等创意编程工具。
当时,项目演示必须使用自己的电脑,因为编译后的程序无法跨平台运行。这让他深感不便,并开始思考:“如果实验作品是网页,岂不是容易得多?”恰逢Google Chrome实验项目兴起,展示了浏览器中JavaScript的强大能力,这促使他自学JavaScript,并创作了多个Canvas和CSS3实验项目。
一个关键转折点是他成功用纯Web技术克隆了流行的Clear to-do应用(以其流畅的手势交互著称)。该作品让他在毕业后获得了Google创意实验室(Google Creative Lab)“Fiverr”项目的青睐,担任“创意技术专家”一职。在那里,他专注于快速原型开发,并首次见到了数据可视化专家Mitcho(Michael Chang)。
在Google期间,Evan需要构建大量交互界面。起初他使用jQuery,但很快发现代码难以维护。在尝试了Backbone和AngularJS 1后,他发现这些框架对于需要快速迭代的原型项目来说过于复杂。
他特别指出AngularJS的“脏检查”机制效率不高,而当时ES5的Object.defineProperty
API提供了拦截属性访问的能力,为实现更高效的响应式系统提供了可能。由于Google创意实验室的项目只需在Chrome Canary中运行,他可以无视旧版浏览器的限制,利用最新技术。这便是Vue最初的原型——一个更轻量、更直观的响应式前端框架。
Vue的早期流行与PHP框架Laravel社区密切相关。当Laravel作者Taylor Otwell在推特上表达对Vue的赞赏后,大量Laravel开发者开始尝试并采纳Vue,因其简单的CDN引入方式和直观的API设计与Laravel的理念非常契合。
Evan指出,Vue的用户群体是多元的。一部分开发者构建的是传统的、服务器渲染为主并辅以JavaScript增强的页面,选项式API(Options API)对此类应用非常友好。而另一部分开发者则在构建复杂的单页面应用(SPA),当应用变得巨大时,选项式API和Mixins在逻辑复用和代码组织上会遇到挑战。
组合式API(Composition API)旨在解决这些问题:
Evan坦言,组合式API的推广过程并非一帆风顺。最初的设计基于Class API,但因过度依赖不稳定的装饰器语法而放弃。随后推出的基于setup函数的组合式API又因语法繁琐而备受争议,直到3.2版本推出<script setup>
语法糖后,开发者体验才得到根本改善。他强调,选项式API将作为稳定API被永久维护,不会被废弃。
Vue 3.6将带来两项重要更新:
1. Alien Signals:这是Vue响应式系统的一次内部重写,其性能在所有JavaScript信号实现中位居榜首。此次升级将带来显著的内存和性能提升,并且对开发者完全透明,100%向后兼容。
2. Vapor Mode:这是一种可选的编译策略。它完全抛弃了虚拟DOM,将模板编译为极致的、手写风格般的命令式JavaScript代码,旨在为性能敏感的应用提供最大化的性能提升。
Vapor Mode只支持一个更精简的API子集(如仅支持Composition API和<script setup>
),这些约束为编译器提供了更多的优化空间。开发者可以在一个大型应用的单个页面中逐步采用Vapor Mode,而无需重写整个项目。
Vite的诞生源于对Vue CLI(基于Webpack)开发服务器启动和热更新(HMR)速度缓慢的不满。Evan的初衷是创建一个按需编译、基于ESM的dev server,以实现近乎瞬时的HMR。
在Vite 1.0发布前夕,受WMR项目的启发,Evan意识到可以将Vue相关的逻辑全部抽离为插件,从而使核心变得框架无关。他果断放弃了1.0的代码,从头开始重写,最终形成了如今这个支持Rollup插件API、框架无关的Vite 2.0。
Vite的成功推动了整个生态对开发体验的重视,甚至促使Webpack等传统工具优化其HMR性能。
对于Next.js为何选择自研Turbo Pack而非采用Vite,Evan给出了他的见解:Next.js在其发展初期与Webpack深度绑定,进行了大量定制化。当Vite兴起时,Next.js团队已经在Turbo Pack上投入巨资(甚至聘请了Webpack的作者),且其与React服务器组件(RSC)的深度集成非常复杂,迁移到Vite的架构成本和风险都极高。
关于Vercel收购Nuxt Labs,Evan表示这对Nuxt团队和社区是一个积极的发展。他认为Vercel的意图是多元化其框架生态,证明其不仅是“Next.js的托管平台”。对Nuxt团队而言,被收购后无需再为商业化分心,可以更专注于框架开发。Nitro(Nuxt的服务器引擎)支持部署到众多平台的特性也得到了Vercel的推动。
Evan创立Void Zero的核心愿景是解决JavaScript生态的碎片化问题。他指出,与PHP开发者拥有Laravel这样的一体化解决方案不同,JavaScript开发者需要从无数个选择中自行组装、配置并维护一整套工具(测试、格式化、linting、构建等),且要保证它们彼此兼容。
Void Zero旨在提供类似Rust的Cargo或PHP的Laravel般的体验——一个工具搞定一切。其产品V+将整合这些开源工具(如Vite、Vitest),并为企业级用户提供增值功能。
商业模式上,V+将采用宽松的许可:个人开发者、开源项目和小型企业可免费使用,而大型盈利性公司则需要购买许可。这避免了“开源核心”模式带来的功能割裂问题,确保所有人使用的是同一个完整版本。
Evan特别强调,Vue.js项目在财务和法律上都与Void Zero公司严格分离,它将继续由开源赞助和捐赠独立运营。目前,有两位核心成员全职投入Vue及相关工具的开发。
Vue本身的API已非常稳定,未来的工作重点将集中在像Vapor Mode这样的可选优化、性能提升和日常维护上,而非引入类似React服务器组件这样的颠覆性特性,其核心原则是“不需要用户重写代码”。