2020 年,Serverless 将给大前端带来什么样的变化?

作者 | 杜欢(阿里巴巴高级前端技术专家)、王文婧

导读:云 + 端模式成为当前前端开发的新风向,由此而来的 Serverless 正帮助前端工程师提升开发能力和效率。近日在 2019 ArchSummit 全球架构师峰会北京站,阿里巴巴高级前端技术专家杜欢(风驰)接受了 InfoQ 记者的采访,为我们详细梳理了阿里巴巴近两年使用云 + 端的 Serverless 来探索前端演进过程的经验和体会。

Question:杜老师,您好!请您介绍一下您的从业经历,以及目前在阿里云战略 & 合作部负责的工作。

杜欢(风驰):目前我在阿里云战略合作部,负责阿里云的开发者业务,更多的是在考虑怎么在云的时代帮助整个广大的开发者社区和生态能够在成为云时代原住民开发者的状态下,有个更好的开发环境。

Question:您从事前端工作多久了?对这个行业有过哪些困惑与思考?

杜欢(风驰):我其实进入到前端行业还是很有趣的一个过程,我最早是在 2001 年左右开始接触到 Web 开发。那个时候,就是做网站,做网站前端、后端、数据库,然后发布运维都要做。那个时候其实也没有现在这么多岗位,基本上就一个岗位——开发,所有的事情都做。

后来随着公司业务的拓展,开始去接一些 Browser 端的工作,当时有一个词叫做 BS,它和 CS 是对应的,CS 叫 Client Side,就是客户端。Client 和 Server,就是客户端和 Server。BS 是 Browser 和 Server。从那个时候开始,这种 BS 结构的应用出现,这种结构的出现其实当时是为了解决开发成本和部署成本的问题。就是有些企业想做一个系统,这个系统可以很容易地让整个企业内部不同的团队、不同的角色很好地利用,部署的成本不要那么高,开发成本也不要那么高。

所以那个时候开始有这种业务类型出现,这种业务类型操作的主要界面就在 Browser 端,那 Browser 端就会遇到一个很大的挑战,也就是说,你的操作行为、表现、习惯跟原来传统的客户端软件开发的那种操作体验是不太一样的。因为 Browser 是浏览器。浏览器里边就是很有限的几个元素 API。然后主要客户就会提一些要求说,你需要帮我把传统的那种体验交互保留下来。因为对我而言,我只是换了一个软件提供商,但是我和我的同事在使用的时候不能有什么感知,对他们来讲应该是一样的。

那个时候遇到的挑战是,在浏览器里如何实现和传统的开发软件里的 UI、组件一样的行为。举个例子,比如说你在搜索框里输入任何一个字符,它会有下拉提示,这是非常常见的一个 UI,但在那个时候是没有的。这个 UI 至今也是没有原生提供的,都是前端去模拟出来的。

所以那个时候我做的就是这些事情。做着做着,我发现挑战非常大,相当于你要完全模拟出一套传统的开发体系里的整个 UI 体系。那个时候就想,我能不能把这个做得更好一点。所以慢慢地开始加入到前端的一些社区。认识了当时的一些朋友。就这样进入到前端行业,一直做到今天。

Question:前端的发展很快,在研发体系的升级上,阿里云是如何部署的?

杜欢(风驰): 前端升级确实是让人又爱又恨的。而且这种升级,在我看来,比如说框架层,它可能要解决的是一些新的研发形态,但是对业务而言,它其实并没有很大规模地解决上一个阶段遇到的问题。

举个研发效率的例子,比如我们现在做工程化、框架的演进,和最早用 jquery 的时候,相对业务而言,有什么变化吗?没有什么变化。而且有时候反而使你的整个协同成本、交付成本、人力成本在一定程度上变高了。因为你引入了工程的概念,你就要去做工程化,工程化不是所有人都能做得很深入。因为工程化本身就是一个领域,所以你又得为了把工程化做好去准备一些特定的侯选人,组建一个团队。相对来讲,你又多了一批做业务的人,业务流程又要变慢。原来可能你在 UI 上做完,JS、HTML、CSS,你怎么做马上就可以看到。现在你是看不到的,你写完之后要编译,工程化和编译完之后,你可能才能看到。

我想表达的是,前端不断地在演进,它其实是更精细化了,质量更有保障,在一定程度上效率可能也有提升。但是从更宏观的角度,从业务的角度来看,它可能不一定真正解决了业务痛点。就比如说今天我们提到,有的业务期望是,人一进来马上就能干活,干完活马上就能上线。从业务的视角来看,前端这几年的演进可能还不是一个终态,它处在一个摸索的阶段。

Question:所以就像您说的,工程化现在还没有达到它的预期效果?

杜欢(风驰): 我们认为,工程化的出现和持续演进未来一定是能帮到业务的,但是它还在摸索的阶段。本身做工程化需要消耗人力、资源,包括流程的新增,这些其实在这个阶段是会降低业务交付效率的。所以我们也不能说它不对,因为它毕竟有一个发展的过程。只是在它还没有到达终态之前,不管是框架还是这种工程化的这种演进,相对来讲都是比较痛苦的。

但是未来如果终态来临,随着未来结合云原生 Serverless,从写代码到最终发布一体化的时代来临,可能所有的问题就迎刃而解了。

Question:我之前采访过一个专家,他说,前端工程化就是在做“消灭”自己的工作,您怎么看?

杜欢(风驰):我是这么理解,如果是消灭自己,那意味着,前端这个岗位目前做的事情未来会有一个东西替代它。
那今天前端的岗位在做什么事情呢?核心是在做用户交互行为的开发,在普遍的基础上,如果加上业务的特性,用户交互行为就会有很多定制化的东西。再加上,因为每一个业务都要差异化才能生存,尤其是 to C 的产品类型,它一定会在用户侧寻找和竞品的差异化,用户侧更多的表现就是怎么让用户看起来更舒服,操作起来更舒服,整个体验更好。这些往往会表现在真正的用户交互行为上的差异。

这里有一个矛盾的点,抽象出来的那些东西,通过工程化确实能以一定的手段来替代,但是差异化的东西怎么来做,是不是能够完全替代,这个还很难说,至少今天还没有一个大家都觉得可信的方案说能够替代掉。就像今天的企业级定制开发也是类似,之所以叫定制开发,就是它至少在提定制的这个时间点,没有一个可抽象、可覆盖它的一个通用的东西,要不然它就不需要定制了,就用通用的就好了。

所以我觉得工程化能够消灭那种通用抽象的东西,但是定制的东西至少目前来看还不能,除非未来机器学习演进到能够理解真正不同的需求,并且能够把这种需求跟现有的技术体系、科学体系完整地链接起来的时候,那我觉得是有机会的。

Question:阿里经济体的前端技术架构是什么样的?它经历了哪些发展阶段,可否提取几个重要的时间节点谈谈?

杜欢(风驰):阿里经济体的前端在一定程度上,至少能代表国内的前端行业发展的阶段。首先,据我所知,在国内,前端这个岗位最早就是在阿里出现的。那个时候为什么会出现前端?已经从原来的所有的应用由一个人开发变成一种用户需求导向,用户觉得你这个应用虽然好,但是操作起来很差,或者整个体验不好,所以能不能有人把这块做得更好?所以在业务的需求下产生了职业精细化的要求。这个精细化的需求在前端岗位诞生的时候,它的核心是把结构、表现、行为这三者做精细化的处理或演进。这是这个岗位诞生之初阿里前端在做的事情。

后来随着业务体量逐渐增大,开始覆盖到的人群,以及人群所在的地理位置都不太一样的时候,越来越多的来自网络比较差的环境的用户会说,打开特别慢,体验不好,那个时候又经历了做性能优化的时代。性能优化主要的目的是,让不同的地理位置的用户都能够以最好的速度访问到我们的业务,让大家的体验尽量是最好的。

第三个阶段,Node.js 的出现,为我们前面谈到的工程化提供了基础。因为做工程化意味着你要去做编译、文件处理,操作一些事情,这些东西需要有一种能力让它能够跑在本地,跑在系统里面,不只是在 Web 页面上。Node.js 当时帮助前端有能力做这件事情,然后开始演进出前端如何进一步地把行为、样式、结构分离,如何做模块化的设计、模块化的开发。拆开之后,这个页面你就看不到了,你想看到,怎么把拆开的东西重新聚合起来?那个时候就是通过 Node.js 做这种整体的工程化。

第一更精细化,第二更精细化之后,能够把它编译在一起,能够看到,同时去解决或优化和原来后端的协同方式。其实在这个阶段之前,前端和后端的协同方式是比较粗暴的,是那种交接式的。就是前端做完页面,然后把产物交接给后端,后端拿着前端做的页面,在那些特定的区域操作,比如说一个表格,表格里面应该有数据,前端会填一些假的