VueConf.US 大会上与 Gregg Pollack 的问答

  • Kevin Ball
  • 盖磊

2018 年 4 月 10 日

话题:JavaScript语言 & 开发

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

Vue.js 的使用率一直在突飞猛进。近期据一份来自 bestof.js.org 的调查显示,它是 2017 年 GitHub 上最受欢迎的开源项目。据VueMastery.com的创始人Gregg Pollack说(他也是今年VueConf.us大会的演讲者之一),Vue 成功的一个主要原因,在于其核心团队聚焦于使 Vue 渐进增量采纳(incrementally adoptable)。

InfoQ 择机采访了 Pollack,采访内容涉及:Vue.js 的内部机制、他对 Vue.js 社区的看法、学习 Vue 的最好方法,以及导致 Vue 成功的更多原因。

InfoQ: 在创立 Vue Mastery 之前,您还创立了 CodeSchool 和 StarterStudio 等面向更通用技术的培训公司。您为什么要创立这样一家专注于 Vue 技术的公司?

Gregg Pollack: 我创立的公司名为 Code Pop,我意识到我个人影响世界的最佳途径(无论是帮助找到治愈癌症的方法,还是让下一位人类登陆去火星),是去加速对最具创新开源技术的采纳。我所能采用的加速方式是通过媒体和内容向人们传授技术。几个月前,我们着手对一系列各异的标准开展研究。我们的目的是确定这样的技术,它们处于最佳的位置、尚未成为主流、仍处于早期采纳阶段,并且确实需要在内容和媒体上得以提升才能真正地成为主流技术。

由此,我们在查看了各种各异的标准之后选择了 Vue。因为 Vue 拥有一个非常健康的生态系统,具备良好的构建势头。而且我认为大家已经看见,根据“State of JavaScript”调查,大约有 43%的 JavaScript 开发人员对学习 Vue 有兴趣。我们认为 Vue 是最多人有兴趣的学习的。好的,这就是我选择 Vue 的原因。对于 Code School 也同样如此,因为我们对所有非常好的技术只做非常基本而非深入的介绍,总会有人从中选择开始学习的技术。但这样做的缺点是很多客户在完成初始课程后就会离开,然后他们在有想要学习的课程是会再次出现然后再次离开。这就是为什么说 PluralSite 收购 Code School 是非常有意义的原因之一。因为 Pluralsite 具有我们所不具备的庞大软件库。但我总是十分好奇,如果我们选择了一种特定的技术并深入研究,我们是否可以创建一个社区、一个关注点,甚至创建这样的参考库?因为这也是 PluralSite 具有惊人的客户终身价值的原因之一。由于人们将 Pluralsite 作为参考软件库使用,因此会在 Pluralsite 上滞留很长的时间。我们知道,一旦人们遇到问题,他们只是用 Google 搜索一下,然后进入 Pluralsite 查看“是否有相关的课程,是否有关于这方面的一些经验教训?”。他们总会有所发现,因为 Pluralsite 的内容比我们丰富太多。所以我打算做 Vue Mastery,目标是使其成为 Vue 开发者的终极学习资源。我希望它会成为 Vue 的参考库。

InfoQ: 您认为人们采纳并使用 Vue 的主要原因有哪些?

Pollack:其中存在多个原因。在我看来,首先,Vue 做得非常出色,实现了 React、Angular 中的所有最佳实践,并且对于使用者而言非常易于采用它。这不仅是因为 Vue 具有所有同样的模式,而且因为它关注了使用者在首次开始学习它时的感受。Vue 具有很好的文档,主要得益于负责文档项目的 Chris Fritz,他非常关心文档的可访问性。这使得文档很棒,特别是在你开始上手时。其次,这还得益于 Vue 可以渐进增量采纳。这意味着,你可以在一开始将 Vue 作为项目的一小部分,也可以从一开始就大范围地使用 vue-cli 并按 Vue.js 方式实现一切。这非常棒,但是对于大型企业而言,如果你想让 Vue 成为主流,那么你必须使它变得非常易于渐进增量采纳。这样在使用 Vue 整个框架并采用其方式实现应用时,可用 Vue 分别实现应用中的各个小部分。。

我前些日子听到有人说出对 React 和 Angular 的一些共鸣。因为这两种技术有很多使用它们做全职开发工作的人,这也许就是为什么随着这两种技术的发展,感觉作为初学者越来越难以上手的原因之一。因为这两种技术几乎已被过度设计,并且也未足够重视新手入门的问题。对于类似的情况,作为初学者是否有人可以在应用中 5%、10%甚至 60%的使用此类技术?我认为这就是 Vue 在过去几年被如此广泛采纳的原因。

InfoQ: 您在演讲中侧重于将响应式能力作为 Vue 的核心特性之一。您能深入介绍一下吗?

Pollack:在许多此类框架中都能发现响应式能力。响应式是指在某处 JavaScript 代码中包含了数据,一旦数据发生变化,框架就知道网页中所有需要做更新或更改的不同位置。如果你能将数据抽象出来,并且你只有一个 JavaScript 数组之类的结构,一旦数据发生改变,你就能知道它所影响的网页部分,这是非常棒的。能给出一个为你实现上述功能的框架是很关键的,这样你就不必操心如何更新 DOM、如何在回调钩子中运行 jQuery。你只需给出一个模板,让框架去发现何时需要做更新,以及如何更新。实际上这就是虚拟 DOM 理念的起源,所有此类框架都具有这种虚拟 DOM,这样可以使模板中的差异可以随着数据的更新,以最有效和最高效的方式得以更新。我在演讲中探索了其背后的机制,并展示了如何创建一个响应式引擎,然后展示了它们在 Vue 源代码中的位置。如此揭示了 Vue 对每个人响应式能力的魔法,因为它真正实现了这种魔法。

InfoQ: 您在演讲中提及很少有人理解核心框架的所有源代码。在您看来,人们最纠结的是哪些特性?

Pollack:我们刚刚在 VueMastery.com 上发布了我们的免费新手素材,所以我们还没有这方面的数据。那么人们在哪些特性上最纠结……我认为,如果你是一位初学者,鉴于 Vue 非常易于初学者采用,你可以小范围地使用它,也可以大范围地使用它。好吧,当我还是一位初学者时,我发现自己一开始的确想知道的是,专业人员如何真正地使用这个东西?因此,现在需要做出一点点的发现,找出一点点问题,为的是弄清楚黄金道路是什么。如果我想投身于 Vue 开发,并从头开始使用所有 Vue 最佳实践,就应该知道有哪些最佳实践。

我认真考虑过,在过去一年里 Vue 一直在不断地发展,最佳实践已经初具雏形,我认为这可能目前令人不太明朗的原因之一。Nuxt.js 等项目在过去几个月才给出 1.0 版。Nuxt 正在做这样的事情,试图告诉你这就是最佳实践,其中使用了所有的关键库,去创建企业级、生产环境中的 Vue 应用。在此处存放所有的文件,此处存放所有的文件夹,我们只需要告诉你如何以最佳实践的方式做到这一点。现在问题已经有所改观,企业 Vue 技术栈究竟应该如何正逐渐变得更清晰。

InfoQ: 在您看来,Vue 中最被低估的特性有哪些?

Pollack: 首先我要说的是动画和转换特性。我认为动画和转换普遍存在于网络应用中,但是很少有企业充分利用它们去创建漂亮的用户界面。我喜欢 Vue 可轻松创作动画和转换的特性,部分可归因于 Vue 的创建者 Evan You 的背景就是一位设计师!所以我认为,这是 You 想要 Vue 从中获得的部分影响力,使得那些可能拥有较少代码体验的设计人员仍然可以轻松访问并使用该框架,这非常棒。那是其中之一。

对于未充分利用的特性……我会说是服务器端渲染。如果 Vue 在呈现回服务器之前渲染模板得到了充分的利用,那么可能会有大量应用使用 Vue。我不清楚其中的各个阶段,我需要弄清楚……如果你真的想要扩展你的应用,有一种方法不仅是渲染模板,而是渲染你的网页,使得在实际需要通过浏览器加载文件时,只有应用中最动态的部分才会被加载到浏览器中。在过去数月中,不同级别的渲染和可扩展性确实得到了强化。你可以使用 nuxt,甚至可以自己做一些服务器端渲染(我认为这是在 vue-loader 中)。这里有一些技巧可以让你充分利用这些特性,并且让前端真正具有可扩展性,并且非常快速。

InfoQ: 您在编程教学上有着丰富的经验。您对首次接触 Vue 的开发者有哪些建议?

Pollack:如果可能,直接访问 VueMastery.com!在我看来,针对初学者的内容应该永远免费,所以我们在 VueMastery.com 上提供的初学者内容将会永远免费。我们花了很多的时间和精力去创造这些内容。你甚至不需要创建一个帐户,就可以观看我们所有的视频并开始学习。我认为这是一个非常棒的资源,当然其中还有 Vue 文档以及入门指南。这个网站棒极了。在开始使用一种技术时,你不会只使用一种资源。因此我无法给你一本书,并说“这里有你所需要知道的一切”。你要从多种资源中学习,并且现在已经有很多很棒的免费资源,包括 Vue 文档、Vue Mastery,以及免费的 Vue 课程 laracasts,它也非常棒。

在 Vue Mastery 上,还免费提供 Vue 要点速查手册。就我的经验而言,当我开始使用某种技术时,最好能在我面前列出所有的语法。由此,我们花了几周的时间创建了一个双面速查手册,将所有的基本语法以触手可及的方式提供给学习者。这样在你开始构建软件时,不必总是查看文档。你可以在桌面上、第二个屏幕上查找你需要的语法,或是打印出来供查看。

查看英文原文: Q&A with Gregg Pollack on Vue.js at VueConf.US

JavaScript语言 & 开发