访谈
Evrone:你好,尤先生,很高兴见到你!我想提问的第一个问题是:你全职从事的项目由Patreon提供资助,这一点非常独特。你如何平衡工作与生活,避免过度疲劳呢?
尤雨溪:虽然我是自雇者,而且在家工作,但每天我都会遵循固定的时间表。其实养育孩子在这方面有很大的帮助,因为每当我不工作的时候,就会(必须)和家人在一起。还有一个很重要的方面是,每当我感觉有需要的时候,就会休息很长一段时间(数周),假如我是一名公司的全职员工,则不大可能这样休假。
Evrone:真了不起!Vue 3版本即将发布。在发布之后你打算休息一段时间,还是已经有了开发下一个版本的Vite构建系统的新计划?
尤雨溪:我有很多尚待完成的工作。对于Vite来说,当前的目标实际上是让它稳定,这是一个新系统,人们正在尝试各种使用方式,有些甚至不在我最初的设想中,因此我们打算等待一段时间,看看下一步的发展。关于Vue 3.1我也已经有了一些想法。但是我一定要休息一段时间,充电很重要!
Evrone:你曾是Google创新实验室的一名创意技术人员,而且你的专业背景是艺术史。在开发Vue的过程中,你是否感觉自己欠缺数学、算法和数据结构方面的教育?是不是我们都需要学习计算机科学理论,才能成为真正的程序员?还是说我们需要学习如何成为“软件编写者”,而且喜欢无聊却易于理解的代码?
尤雨溪:老实说,我并没有太多感觉,我个人认为一般来说Vue或前端框架不是一个特别需要数学/算法的领域(例如,与数据库相比)。我不觉得自己在算法或数据结构方面很强。这方面的学习肯定会有所帮助,但是对于建立一个流行的框架,了解用户、设计合理的API、建立社区以及长期的维护承诺更为重要。
我认为成为“软件编写者”与编写“乏味但易于理解的代码”并不矛盾。实际上,编写无聊但易于理解的代码需要一定的经验(前提是这些代码并非极度低效)!我认为即便你没有经过严格的计算机科学培训,也不必觉得自己没有资格编写软件,但你也不应该忽略这些知识欠缺。我个人采取了务实的方法,我曾用最蠢笨的方法做了很多事情,并从中了解我需要学习哪些知识才能提高自己。
Evrone:好厉害。自从有了Nuxt.js和JAMstack之类的许多技术之后,开发人员都想完全专注于应用程序的前端部分,并使用最低限度的后端,比如JS、BaaS等。你如何看待这些“无后端”或“全栈”的方法?
尤雨溪:我认为这更像是正在制造的产品驱动着正在使用的技术。开发人员之所以选择这种技术栈,是因为适合他们正在构建的产品类型:相对简单的后端逻辑,他们需要更多地关注前端交互。这种方式显然不是灵丹妙药,但非常适合某些类别的应用。
Evrone:Vue被重写了很多次。如果时光倒流,你可以给年轻人一个技术建议,那么将是什么?
尤雨溪:如何更好地分离和解耦内部模块。
Evrone:在过去的几年中,我们看到了JavaScript和TypeScript的并行发展。你觉得近期会出现怎样的发展:我们最终会将类型添加到核心的JavaScript中,还是说TypeScript取代JavaScript,或者会出现其他情况?
尤雨溪:我认为将类型添加到JS本身是一个漫长的过程,我个人认为不会出现这种情况,因为让委员会设计一个类型系统是……(根据TC39的经历来判断)不切实际的。TypeScript不会取代JS,因为它是JS的超集。我个人认为,让JS和TS(带有类型的超集)并行发展是最实际的方法,并且在可预见的将来也是如此。
Evrone:Vue的用户群已超过一百万。你认为衡量技术采用率的最佳方法是什么?Stack Overflow上的提问次数、GitHub上的星数和其他公共访问指标都很棒,但是有很多公司用户在隔离的网络上工作,他们并没有提出很多问题,只是“使用技术”。我们如何统计这部分采用率呢?
尤雨溪:这对于开源软件而言是一个内在的难题,因为用户没有义务报告使用情况,而作为作者,我们确实没有可靠的方法来统计采用率,尤其是很多应用都没有公开。因此,我认为开发者工具扩展的用户数是最可靠的指标,因为它考虑了所有用户。
Evrone:即将到来的Vue.js3在摇树算法(Tree shaking)方面付出了大量努力。作为一款现代框架,你觉得为什么加入摇树算法花费了这么长时间?有什么重大难题吗?
尤雨溪:摇树的原理以一种特别的方式依赖于源代码的结构,这意味着最好从编码和设计API的一开始就考虑摇树。将现有的大型代码库变成摇树算法可以利用的形式非常困难,因为需要大量修改API或进行重大重构(风险巨大)。
Evrone:有关Vue 3中“基于函数的组件API”提案遭到了社区成员的强烈反对。你有什么想法与其他开发人员分享吗?
尤雨溪:反对意见主要是因为担心我们会弃用Vue当前(2.x)的API,而我们认为这是一个错误的想法。作为作者和维护者,我们常常在日常工作中与热心的早期采用者互动,对于新的想法,他们自然比新用户更感兴趣,这导致我们误解了向后兼容性的重要性。用户不喜欢弃用现有的功能。
重点在于,你需要了解用户的需求,这不是特别容易,有时你很难获取这样的信息,但无论怎样你需要认真听取大家的意见。
Evrone:Vue的用户范围非常广泛,从小型企业到中型代理机构,再到数十亿美元的上市公司,就连Louis Vuitton和NASA都在使用Vue。你能否推荐一个用Vue编写复杂前端的真实例子?
尤雨溪:问题在于,大多数复杂前端的项目都不是开源的。我建议你看看Vue开发者工具和Vue命令行工具,尽管二者不是常见的面向消费者的Web应用程序,但都是用Vue编写的比较复杂的界面。
总结
我们与尤雨溪进行了愉快的交谈,并了解了他的生活与编程方式。我们经常使用Vue.js创建可满足客户独特需求的定制解决方案。我们非常高兴有机会向该技术的作者讨教,增强我们的专业知识,同时也希望他们为我们提供更多可用于开发创新产品的工具。
用户不喜欢弃用现有的功能。重点在于,你需要了解用户的需求,这不是特别容易,有时你很难获取这样的信息,但无论怎样你需要认真听取大家的意见。
什么是vue是一套构建用户界面的渐进式(用到哪一块就用哪一块,不需要全部用上)前端框架,Vue 的核心库只关注视图层vue的兼容性 Vue.js 不支持 IE8 及其以下版本,因为 Vue.js 使用了 IE8 不能模拟的 ECMAScript 5 特性。 Vue.js 支持所有兼容 ECMAScript 5 的浏览器。vue学习资源vue.js中文官网:http://cn.vuejs.org/vue.js源码:https://github.com/vuejs/vuevue.js官方工具:https://github.com/vuejsvue.js官方论坛:forum.vuejs.org对比其他框架-ReactReact 和 Vue 有许多相似之处,它们都有使用 Virtual DOM;提供了响应式(Reactive)和组件化(Composable)的视图组件。将注意力集中保持在核心库,而将其他功能如路由和全局状态管理交给相关的库。React 比 Vue 有更丰富的生态系统都有支持native的方案,React的RN,vue的Wee下都支持SSR服务端渲染都支持props进行父子组件间的通信性能方面:React 和 Vue 在大部分常见场景下都能提供近似的性能。通常 Vue 会有少量优势,因为 Vue 的 Virtual DOM 实现相对更为轻量一些。不同之处就是:数据绑定方面,vue实现了数据的双向数据绑定,react数据流动是单向的virtual DOM不一样,vue会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树.而对于React而言,每当应用的状态被改变时,全部组件都会重新渲染,所以react中会需要shouldComponentUpdate这个生命周期函数方法来进行控制state对象在react应用中不可变的,需要使用setState方法更新状态在vue中,state对象不是必须的,数据由data属性在vue对象中管理(如果要操作直接this.xxx)组件写法不一样, React推荐的做法是 JSX , 也就是把HTML和CSS全都写进JavaScript了,即'all in js'Vue推荐的做法是webpack+vue-loader的单文件组件格式,即html,css,js写在同一个文件对比其他框架-angular在性能方面,这两个框架都非常的快,我们也没有足够的实际应用数据来下一个结论。如果你一定想看些数据的话,你可以参考这个第三方跑分。单就这个跑分来看,Vue 似乎比 Angular 要更快一些。在大小方面,最近的 Angular 版本中在使用了 AOT 和 tree-shaking 技术后使得最终的代码体积减小了许多。但即使如此,一个包含了 vuex + vue-router 的 Vue 项目 (30kb gzipped) 相比使用了这些优化的 Angular CLI 生成的默认项目尺寸 (~130kb) 还是要小的多。灵活性:Vue 相比于 Angular 更加灵活,Vue 官方提供了构建工具来协助你构建项目,但它并不限制你去如何组织你的应用代码。有人可能喜欢有严格的代码组织规范,但也有开发者喜欢更灵活自由的方式。vue.js的核心特点—响应的数据绑定传统的js操作页面:在以前使用js操作页面的时候是这样的,需要操作某个html元素的数据,就的使用js代码获取元素然后在处理业务逻辑响应式数据绑定的方式操作页面,可以直接使用像下面代码那样的写法就可以将数据填充到页面中<template> <div id="app"> {{ message }} </div></template><script>export default { name: 'app', data () {return { message: 'Welcome to Your Vue.js App'} }}</script><style></style>vue.js的核心特点—可组合的视图组件一个页面映射为组件树。划分组件可维护、可重用、可测试,也就是一个页面由多个组件组合而成vue中实现组件引入示例第一步:import导入需要引入的组件文件;第二步:注册组件;第三步:在需要引入组件的文件中加上组件标签(这个标签的标签名就是注册的组件名字,多个单词的和这里有xx-xx的形式)需要注意的是:组件可以嵌套引入,也就是说组件可以引入其他组件首先创建一个组件,用于被引入的组件,组件名字叫Hello.vue————————————————版权声明:本文为CSDN博主「胡椒粉0121」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 [5] 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue也完全能够为复杂的单页应用(SPA)提供驱动。
Vue.js是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此它非常容易学习,非常容易与其它库或已有项目整合。另一方面,在与相关工具和支持库一起使用时 ,Vue.js 也能驱动复杂的单页应用。开发环境下,Vue 会提供很多警告来帮开发者对付常见的错误与陷阱。而在生产环境下,这些警告语句却没有用,反而会增加应用的体积。此外,有些警告检查还有一些小的运行时开销,这在生产环境模式下是可以避免的。