访谈对象:

尤雨溪,Vue.js 创作者,Vue Technology创始人,致力于Vue的研究开发。

访谈内容:

你为何选择从事前端方面的工作?

其实,我本科读的是艺术史,研究生阶段学习Design & Technology,是设计和技术的混合。开始做前端的一个重要原因是,没有人帮我把设计出来的作品放到网站上给别人欣赏。比如说设计一个网站,但是没人帮我把设计出来的网站做出来。所以我只能自己做,做着做着就发现做网站本身也很有趣。

做网站的过程中也涉及怎么写出好的代码,怎样把设计的作品实现出来,后来慢慢发现我对前端更感兴趣,也花费了更多的时间。

前端需要跟用户打交道,可以说,设计方面的背景其实对你的帮助很多。

肯定是有一定帮助的。

又是什么原因促使你萌生了开发Vue的想法?

在谷歌工作的时候,我们要做很多界面的原型,要求快速上手,灵活运用。当时用的一些现有框架,比如angular,太笨重了。个人而言,我更倾向于针对我的用力做一个更轻量化的实现,同时也想做一些实验练练手,研究一下angular到底是如何实现的。所以说,最早Vue是作为一个单纯的实验项目在做。

从2013年7开始,它的增长速度好几次都超出了我自己的期望,我就想能不能再用点力推一把。每次再推一把,它又超出我的预期,慢慢地就变今天这样了。

也有很大一部分原因是,我把Vue当作自己的一个作品,以匠人的态度不断地琢磨完善它。一个版本做出来之后,我会不断地思考打磨,到现在为止我已经重写过两次了。Vue每一次的增长,都会给我更多的动力继续前行。

但是,谷歌主打angular,不会对你有什么限制?

谷歌内部并不会强迫你一定要用什么技术,选择上还是自由的。当时我所在的团队也是比较特殊,creative lab以实验为主,强调速度。对这样的类型项目来说,angular会引入很多不必要的限制。

就像你刚才说的,Vue的代码简约,上手比较快。但是简约跟功能其实是矛盾的两个方面,顾到了简约,就可能限制功能,增加工具的功能性,代码就难免变得繁冗。怎么样做到这种鱼和熊掌的兼得?

英文里面有一个词叫Pragmatism,就是实用主义。在简洁的同时,Vue也强调使用者实现想做事情的目的。可以说,最早Vue是非常看重这一点的,我们也增加了很多类似于方便性质的API,比如说过滤器。

在早期设计还不是很成熟的时候,我从angular那边借鉴过来的一些功能并没有得到充分地考量。一开始感觉应该有作用,就先放了进来。重新迭代的过程中,我发现它们并没有那么好,也不如看起来那么方便。

随着用力的推广,Vue开始用于一些更长期的项目。这种情况下,一些短期内方便的功能变得难以维护。所以Vue在轻量和功能之间也发生了变化,从一开始的强调速度,简单上手,到后面的注重用户代码的可维护性,避免用户自己掉到自己写出来的陷阱里,一直在不断地转化。最终的目标是找到一个比较良好的平衡点,维持简易上手的良好体验,同时尽可能地避免一时的便易影响长期的可维护性。

眼前利益和长远利益同时兼顾。

对,比如说Vue 1.0、2.0每次变更、废弃API的时候,都会有很多讨论。很多时候,一些用户表示说,这么好用的东西,为什么要拿掉它?拿掉它的原因,其实是,用户用它们写出了一些很匪夷所思的代码。我看了之后就觉得,如果这个东西会导致大家写出这样的代码,可能还是拿掉它比较好一些。

国外的情况不太了解,但是国内有一些公司,比如说美团、滴滴、饿了么等这些互联网公司,都开始用Vue开发项目,您觉得国外是怎么样一个情况?

国外的话,Vue的增长趋势分两块。很多中小型的企业或者是创业公司会使用Vue开发项目。对他们来说,生产力是一个重要的衡量指标,强调周转效率,快速投入,快速结束项目。同时,培训新的开发者加入新项目,达到快速上手的水平也是一个很明显的需求,在这样的需求下,他们对Vue的采用度会非常高。

另外有一些大公司,像日本的Line还有任天堂,英国的一家大型百货连锁公司Sainsburry等也在大规模地使用Vue开发项目。有意思的是,美国主流的大公司,还是比较倾向于用他们自己的硅谷产品。可能源于产业文化的影响,毕竟Google和Facebook的牌子在美国实在是太响了。

Vue的成功给你的生活和技术上带来哪些改变?

最大的影响肯定是,我可以全职开发Vue,也有了时间做2.0的重构。2.0其实是打乱原有的结构,从头开始,重新构建,底层做了很大的改动。能够全职开发Vue,一方面源于网上社区的捐助,一方面来自一些其他的来源,收入上维持跟之前工作时的一样,但自由度的提高让我可以掌控自己的时间,做自己最想做的事情。

在Meteor工作的时候,有很长一段时间我都很纠结,因为我发现我其实更想做Vue,但是又不得不做公司的事情。虽然也跟公司谈过,却没有找出一个特别靠谱的结合方案,最后我还是决定自己出来干。

有些技术人员被业务忙得晕头转向,而个人能力得不到提高,尤其是技术方面。他们就很苦恼,不知道是屈从于业务,还是发展自己的技能?

我觉得自己很幸运,可以做自己特别想做的事情。但是,我希望技术人员不要盲目效仿。Vue是一个特例,很多机遇才让Vue发展到今天的样子。如果没有适当的渠道或者一定的经济支撑的话,我也没有办法全职开发Vue。

最近即将上线的2.0,相对于1.0,在功能和性能上有哪些改进?

总体来说,性能方面提升了将近一倍。我们在技术细节上做了很大改动,整个渲染底层完全换掉了,Virtual DOM的采用打开了很多新的可能,比如说服务端渲染,手动Render Function,以Vue作为运行时结合Weex渲染到原生的客户端。2.0一方面大幅度提升了性能,一方面拓展了更多使用Vue的场景。

另外,2.0在API上也做了更进一步的精简。2.0删掉的API比新增的API要多。之前也说了,Vue在简洁跟多功能之间不断寻求平衡,所以1.0里面的不少“鸡肋”功能——既可以用这个方式实现,又可以用那个方式实现,我们狠狠心就拿掉了。

2016年State of JavaScript的调查显示,Vue的受欢迎程度仅次于React。能否跟大家讲讲React和Vue在定位和内部实现方式上,有哪些异同点?

虽然两者在定位上有一些交集,但差异也是很明显的。Vue的API跟传统web开发者熟悉的模板契合度更高,比如Vue的单文件组件是以模板+JavaScript+CSS的组合模式呈现,它跟web现有的HTML、JavaScript、CSS能够更好地配合。

从使用习惯和思维模式上考虑,对于一个没有任何Vue和React基础的web开发者来说, Vue会更友好,更符合他的思维模式。React对于拥有函数式编程背景的开发者以及一些并不是以web为主要开发平台的开发人员而言,React更容易接受。这并不意味着他们不能接受Vue,Vue和React之间的差异对他们来说就没有web开发者那么明显。可以说,Vue更加注重web开发者的习惯。

实现上,Vue跟React的最大区别在于数据的reactivity,就是反应式系统上。Vue提供反应式的数据,当数据改动时,界面就会自动更新,而React里面需要调用方法SetState。我把两者分别称为Push-based和Pull-based。所谓Push-based就是说,改动数据之后,数据本身会把这个改动推送出去,告知渲染系统自动进行渲染。在React里面,它是一个Pull的形式,用户要给系统一个明确的信号说明现在需要重新渲染了,这个系统才会重新渲染。两者并没有绝对的优劣之分,更多的也是思维模式和开发习惯的不同。

两者不是完全互斥的,比如说在React里面,你也可以用一些第三方的库像MobX实现Push-based的系统,同时你也可以在Vue2.0里面,通过一些手段,比如把数据freeze起来,让数据不再具有反应式特点,或者通过手动调用组件更新的方法来做一个pull-based系统。所以两者并没有一个绝对的界限,只是默认的倾向性不同而已。

对于一般的技术人员来讲,掌握某项技术已经是不小的挑战,自己如果可以开发出来一个新工具应该说是一种瞻望的高度。你会给他们一些什么建议用于开发创造新的工具?

我的建议是永远要保持好奇心。很多人可能忙于应付业务,没有在业余时间做任何尝试探索,也就只能停留在这样的一个层面。另外,可能有些东西也是不能强求的,比如说我做Vue的时候,很多时候来自自己的兴趣。我并没有强迫自己一定要怎么样,是自发的一种渴望,我想去把Vue做得更好,然后就去研究了。

兴趣也是一个很重要的因素,就是说,如果有动力想要去做一件事情,你就尽可能地把兴趣稍微拔高一点,定一个更高一点的目标,看看能不能把兴趣推进一步。技术人员肯定会有自己感兴趣的技术方向,大部分在某个技术领域做出一定成就的人,可能都少不了浓厚的兴趣驱动。没有兴趣作为原动力的话,很难长久保持一种持续学习,持续研究的状态。我也不知道这种兴趣能不能后天培养,但是多探索、多尝试,说不定哪天你就发现了新事物

转载自:http://www.ituring.com.cn/article/273032

Vue作者尤雨溪:以匠人的态度不断打磨完善Vue (图灵访谈)的更多相关文章

  1. 专访Vue作者尤雨溪:Vue CLI 3.0重构的原因

    1.为什么要对 Vue CLI 进行大规模修改? 尤雨溪认为旧版本的 Vue CLI 本质上只是从 GitHub 拉取模版,这种拉模版的方式有几个问题: (1) 在单个模版里面同时支持太多选项会导致模 ...

  2. React 和 Vue 到底谁更牛?听听尤雨溪怎么说

    React 和 Vue 到底谁更牛?听听尤雨溪怎么说 知乎上近日有人发起了一个 “react 是不是比 vue 牛皮,为什么?” 的问题,再度引发一场关于前端框架谁更牛的口水战,评论里可以说是撕得不可 ...

  3. 致敬尤雨溪,Vue.js 让我赚到了第一桶金

    最近这个 Vue.js 纪录片在前端圈广为传播,相信不少人已经看过了.第一次看编程领域的纪录片,感觉还挺新鲜的.这部 30 分钟左右的纪录片制作精良,主角是 Vue.js 作者尤雨溪,还穿插采访了框架 ...

  4. 尤雨溪:TypeScript不会取代JavaScript

    来源 |evrone.com译者 | 核子可乐策划 | 蔡芳芳 近日,Evrone 与 Vue.js 的作者尤雨溪进行了一次访谈,了解他对于无后端与全栈方法.以及 Vue.js 适用场景的看法,还有他 ...

  5. [译] 尤雨溪:Vue 3.0 计划

    [译] 尤雨溪:Vue 3.0 计划 原文:Plans for the Next Iteration of Vue.js作者:Evan You 发表时间:Sep 30, 2018译者:西楼听雨 发表时 ...

  6. 听说尤雨溪在开发vue4.0?是谁煽动了前端圈的焦虑情绪

    导火索因P图而起 今天前端圈里被一张P图搞得好热闹,最初只是QQ群里一个冒名尤雨溪的前端网友发了一句调侃的话,原话截图如下: 看完觉得好搞笑,说尤雨溪在开发vue4.0,有谁学不动了,就给他发10块钱 ...

  7. 尤雨溪在直播中讲到的Vue3.0 Beta的那些特性,快记笔记了

    前言 在那天风雨交加的夜晚,Vue的创作者尤雨溪尤大大在b站直播分享了Vue.js 3.0 Beta最新进展.我对直播的内容进行了一下整理.整整用了三天的空余时间赶上了 1. 全新文档RFCs Vue ...

  8. 尤雨溪的vue怎么学,应该从vue-cli开始,为什么?

    带手机验证码登陆, 带全套购物车系统 带数据库 前后端分离开发 带定位用户功能 数据库代码为本地制作好了 带支付宝支付系统 带django开发服务器接口教程 地址:   https://www.dua ...

  9. 蒲公英 · JELLY技术周刊 Vol.12 尤雨溪新作 Vite, 你会支持么?

    「蒲公英」期刊,每周更新,我们专注于挖掘「基础技术.工程化.跨端框架技术.图形编程.服务端开发.桌面开发.人工智能」等多个大方向的业界热点,并加以专业的解读:不仅如此,我们还精选凹凸技术文章,向大家呈 ...

随机推荐

  1. PHP与JavaScript在处理数组方面的不同之处

    数组在编程的时候是经常被使用到的一种数据结构,然而在不同的编程语言中是引用方法大同小异,下面来看一看数组元素在PHP与JavaScript中有什么不同吧. 以遍历数组元素为例: 1.在PHP中, // ...

  2. sublime test2 快捷键

    快捷键比较全的:http://blog.useasp.net/archive/2013/06/14/sublime-text-2-all-default-Shortcuts-table-on-wind ...

  3. maven中去掉单元测试的配置

    如果是在命令行中去掉测试,可以在命令行中输入:mvn install -Dmaven.test.skip=true 在pom.xml <plugins>       <plugin& ...

  4. [信号处理技术]关于EMD的产生

    通俗易懂,有助于理解EMD和HHT,就原封不动的搬过来了. 原文链接:关于EMD的产生 自傅里叶变换与频谱分析技术产生,人们得以从另外一个角度观察时域信号,信号里各个点的密集程度,得以确定性地度量.之 ...

  5. 11_Android中HttpClient的应用,读取网络xml及xml解析流,Handler的应用,LayoutInflater的使用,SmartImageView的使用

     1 所需的web项目结构如下: 2 new.xml的文件内容如下: <?xml version="1.0" encoding="UTF-8" ?&g ...

  6. 4种方法让SpringMVC接收多个对象(转:http://blog.csdn.net/lutinghuan/article/details/46820023)

    问题背景: 我要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该如何处理? 第1种方法:表单提交,以字段数组接收: 第2种方 ...

  7. Linux System Programming --Chapter Seven

    文件和目录管理 一.文件与其元数据 我们首先看一下一个简单的文本文件是怎么保存的: 打开vim,编辑一段文本: [root@localhost ~]# vim hello.txt 编辑内容如下: op ...

  8. 对嵌入式开发C语言结构体的一点总结

    今天冬至居然不上班,公司的良心啊!这回有心情写博客和日志了,好了,废话不多说.直接看下文: 鉴于嵌入式开发过程中,C语言结构体的使用当然是必不可少.话说,基础什么的比你会更牛逼的算法更重要,基础不牢, ...

  9. 并发服务器--02(基于I/O复用——运用epoll技术)

    本文承接自上一博文I/O复用——运用Select函数. epoll介绍 epoll是在2.6内核中提出的.和select类似,它也是一种I/O复用技术,是之前的select和poll的增强版本. Li ...

  10. 嵌入式C语言位运算之清位置位

    如题,在嵌入式开发中,掌握位运算是节省开发时间和提高开发效率的一种高效方式. 我们不得不去熟悉如何快速掌握位运算这种高效的技巧,接下来看看程序.. #include <stdio.h> # ...