点击关注 InfoQ,置顶公众号

接收程序员的技术早餐

nodejs技术前沿(Node全栈为前端带来更多可能)(1)

嘉宾|桑世龙

编辑|覃云

2009 年,Node.js 横空出世,在几年时间里,Node.js 凭借其高性能、易部署等特点迅速在前端领域脱颖而出,成为大火的明星。但一个技术再好,也是有生命周期的,许多开发者开始质疑,node.js 是不是在走下坡路了?Node.js 是不是越来越不吃香了?

为此,InfoQ 采访了阿里巴巴前端技术专家、Node 技术传道者桑世龙(狼叔),为大家解答关于 Node 的问题,以及开发者在日新月异的技术迭代环境中应该如何建立起自己的“大局观”。以下是采访的全部内容。

友情提示:在即将到来的 2018 年 GMTC 大会上,狼叔将担任 Node 专场的出品人,喜欢狼叔和对 Node 有兴趣的读者千万别错过。

Node 为解决后端并发而生,但却无心插柳,成为大前端的基石。伴随大前端的发展,Node 也发展得越来越好,越来越重要,其应用场景从脚手架、辅助前端开发(比如 SSR、PWA 等)的快速开发实践,到 API 中间层、代理层,到专业的后端开发都有非常成熟的经验。另外,前端越来越复杂,后端服务化,今日的前端要面临更多的挑战,Node 全栈给大家更多可能,狼叔对此坚定不移。

1 2017 年,Node 的日子好过吗?

狼叔主要从以下四个方面介绍了 2017 年 Node 发生的变化:

a)Node 8 进入 LTS 时代

nodejs技术前沿(Node全栈为前端带来更多可能)(2)

2017 年,Node.js 最大的变化是进入 Node 8 时代,它是一个稳定的长期支持版本(LTS),除了性能提升外,还有以下几个要点。

Node v9.9 对 ES2018 支持是 75%,在 Node v10 里支持是 100%,还是非常值得期待的,更多信息参见 http://node.green/#ES2018。

b)企业级 Web 开发

基础框架除了应用最广泛的主流 Web 框架 Koa 外,Fastify 也是一直劲敌,作者 Matteo Collina 是 Node.js 核心开发,Stream 掌门,性能优化专家。Fastify 基于 Schema 优化,对性能提升极其明显。狼叔认为这是企业级 Web 开发,他在这里给我们介绍了 3 个知名框架。

b1)Egg.js

阿里开源的企业级 Node.js 框架 Egg 发布 2.0,基于 Koa 2.x,异步解决方案直接基于 Async Function。框架层优化不含 Node 8 带来的提升外,带来 30% 左右的性能提升。

Egg 采用的是 『微内核 插件 上层框架』 模式,对于定制,生态,快速开发有明显提升,另外值得关注的是稳定性和安全上,也是极为出色的。

b2)Nest

Nest 是基于 TypeScript 和 Express 的企业级 Web 框架。

很多人开玩笑说,Nest 是最像 Java 开发方式的,确实,Nest 采用 TypeScript 作为底层语言,TypeScript 是 ES6 超集,对类型支持,面向对象,Decorator(类似于 Java 里注解 Annotation)等支持。在写法上,保持 Java 开发者的习惯,能够吸引更多人快速上手。

TypeScript 支持几乎是目前所有 Node Web 框架都要做的头等大事,在 2017 年 Nest 算首个知名项目,值得一提。

b3)ThinkJS

ThinkJS 是一款拥抱未来的 Node.js Web 框架,致力于集成项目最佳实践,规范项目让企业级团队开发变得更加简单,更加高效。秉承简洁易用的设计原则,在保持出色的性能和至简的代码同时,注重开发体验和易用性,为 WEB 应用开发提供强有力的支持。

ThinkJS 是国产老牌 Web 框架,在 2017 年 10 月发布 v3 版本,基于 Koa 内核,在性能和开发体验上有更好的提升。

整体来看,Node.js 在企业 Web 开发领域日渐成熟,无论微服务,还是 Api 中间层都得到了非常好的落地。2017 年,唯一遗憾的是 Node.js 在 servless 上表现的不太好,相关框架实践偏少。

c)不可不见的 Api 中间层

前端越来越复杂,后端服务化,今日的前端要面临更多的挑战。一个典型的场景就是在服务化架构里,前端面临的最头痛的问题是异构 API,前后端联调的时候,多个后端互相推诿,要么拖慢上线进度,要么让前端性能变得极其慢。进度慢找前端,性能差也找前端,但这个锅真的该前端来背么?

Node.js 的 Api 中间层应用很好地解决了这个问题。后端不想改的时候,实在不行就前端自己做,更灵活,更能应变。

除此之外,前端如果想做一些技术驱动的事儿,SSR(服务器端渲染)和 PWA(渐进式 Web 应用)也是非常不错的选择。

d)新领域(深度学习、区块链等)

狼叔说他这部分接触得不多,不过从这些开源项目可以看到有很多开发者热衷于使用 Node.js 做开发创新,这是非常值得高兴的。

2 如何将 Node 的价值发挥到极致?

狼叔说过,“不是 Node 不行,而是你不会用”,他认为很多人对 Node.js 有很多误解,从 2009 年诞生到现在,Node.js 的改变进化是非常明显的,甚至说是有了质的变化。

一般,后端开发指的是 Web应用开发中和视图渲染无关的部分,但现在架构升级,Node承担了前后端分离重任之后,有了更多玩法。从带视图的传统Web 应用面向 Api 接口应用,到通过RPC调用封装对数据库的操作,到提供前端Api代理和网关,服务组装等,统称为后端开发,不再是以往只有和数据库打交道的部分才算后端,这样,就可以让前端工程师对开发过程可控,更好的进行调优和性能优化。

对 Node.js 来说,一直没有在后端取得其合理的占有率。原因很简单:

纵览 2017 年 Node.js 的发展路程,作为一个亲历者,他觉得 Node 在 4 个方面表现得极为突出:

狼叔希望更多的 Node.js 开发者能够参与其中,本次 GMTC 大会也会围绕这写主题进行 topic 筛选,希望能够为国内 Node.js 的繁荣做出一点贡献。

3 如何选择适合自己的 Node 框架?

开发者在面对如此多的 Node 框架时,总会眼花缭乱,不知道是该从众还是应当选择自己擅长的框架,对此,狼叔是这么说的。

Web 应用大致分 2 种,带视图的 传统 Web 应用面向 Api 接口应用,而 Node.js Web 应用开发框架的演进时间线大致如下:

我们根据框架的特性进行分类:

nodejs技术前沿(Node全栈为前端带来更多可能)(3)

对于框架选型

个人学习求新,企业架构求稳,无非喜好与场景而已。

Node.js 本来就为了做后端而设计的,这里我们再看看利益问题。Node.js 向后端延伸,必然会触动后端开发的利益。那么 Proxy 层的事儿,前后端矛盾的交界处,后端不想变,前端又求变,那么长此以往,Api 接口会变得越来越恶心。后端是愿意把 Api 的事儿叫前端的,对后端来说,只要你不动我的数据库和服务就可以。

但是 Node.js 能不能做这部分呢?答案是能的,这个是和 Java、PHP 类似的,一般是和数据库连接到一起,处理带有业务逻辑的。目前国内大部分都是以 Java、PHP 等为主,所以要想吃到这部分并不容易。

国内这部分一直没有做的很好,所以 Node.js 在大公司还没有很好的被应用,安全问题、生态问题、历史遗留问题等,还有很多人对 Node.js 的误解。

这些对于提供 Api 服务来说已经足够了。

对于企业 Web 开发来说,更重视稳定性和安全性,通过约定开发方式,提供高效开发效率。目前 Egg、Thinkjs、Nest 这方面是先行者,想必开发者对它们都已经非常熟悉了,可以放心使用。

4 “向前看” or “向钱看”?

生活无非是迷茫的和目标清晰的。迷茫的人想找到目标是非常曲折的一个过程,所以最简单的办法就是“向钱看”,市场作为检验技术流行程度的一个标准。没有目标,那就多学点能赚钱的技能。

很多人度过了迷茫期,这时候就需要“向前看”,知道自己想要什么,只能自己该做什么,有自驱能力,这时候更多的是看清趋势,在变化中总能做对事情,除了做好的分内之事外,无论业务还是技术发展都需要对发展走势做出正确的判断。

对于 Node.js 开发者来说,

1)“向钱看”:学会,能用,如果学会 Node.js 不能在收入或者潜在收入有提升,那也没啥意思。

Node.js 编写的包管理器 npm 已成为开源包管理了领域最好的生态,直接到 2017 年 10 月份,有模块超过 47 万,每周下载量超过 32 亿次,每个月有超过 700 万开发者使用 npm。现在早已经超过 60 万个模块了。在此,狼叔举了一个例子,他说曾有开发者向他讨教调整状态的办法,而狼叔的建议是,让他每天看 10 个 npm 模块。

狼叔认为,对于学习 Node.js 迷茫的人来说,这是最好的方式,当你不知道如何做的时候,就要向前(钱)看,你要知道积累哪些技能对以后有好处。对于学习 Node.js 必经之路,一定是要掌握很多模块用法,并从中汲取技巧、思路、设计思想的。与其不知道学什么,为什么不每天积累几个技巧呢?

2)“向前看”:用好,创造更多价值。各家公司都有 KPI,怎么能够通过 Node 快速达成自己的 KPI 是非常重要的。

对此,狼叔给出了他的招人标准:

“向前看”不是简单在一个领域内钻研,而是能够在精通一门之后,扩展广度,提高自身的解决问题能力。当然,如果能够在架构层面去思考问题,那就更完美了,对未来职业发展有无限好处。

5 “专注” or “技多不压身”?

狼叔对自己的定位是专注于 Node.js 技术,如果没法做更多 Node.js 相关的内容,不如就离开,但这是不是意味着与“技多不压身”的观点相悖呢?对此,狼叔是这么解释的。

《Node.js in action》一书里说,Node.js 所针对的应用程序有一个专门的简称:DIRT。它表示数据密集型实时(data-intensive real-time)程序。因为 Node.js 自身在 I/O 上非常轻量,它善于将数据从一个管道混排或代理到另一个管道上,这能在处理大量请求时持有很多开放的连接,并且只占用一小部分内存。它的设计目标是保证响应能力,跟浏览器一样。

这话不假,但在今天来看,DIRT 还是范围小了。其实 DIRT 本质上说的 I/O 处理的都算,但随着大前端的发展,Node.js 已经不再只是 I/O 处理相关,而是更加的“Node”!

Node.js 使用场景主要分为 4 大类:

nodejs技术前沿(Node全栈为前端带来更多可能)(4)

可以说目前大家能够看到的、用到的软件都有 Node.js 身影,当下最流行的软件写法也大都是基于 Node.js 的,比如 PC 客户端 luin/medis 采用 electron打包,写法采用 React Redux。他一直实践的【Node 全栈】,也正是基于这种趋势而形成的。在未来,Node.js 的应用场景会更加的广泛,更多参见 sindresorhus/awesome-nodejs。

狼叔亲历了从 node 0.10 到 iojs,从 node4 到目前的 node9,也写了很多文章,参加很多技术大会,做过很多次演讲,有机会和业内更多高手交流的机会。当然他也从 qunar 到阿里经历了各种 node 应用场景,对于 node 的前景他是非常笃定的。正如上文所说,善于使用 node 有无数好处,如快速出成绩、性能调优、优化团队结构、人员招聘等诸多利好,让他坚定地守护 Node.js。

Node.js 目前的应用场景和招聘市场都是极大的,很多公司都使用 Node.js,阿里、腾讯、百度和去哪儿等,还有青岛的海尔集团这样的传统名企,video 、石墨文档这样的创业互联网公司,Node 产生的商业价值是无法估量的。

狼叔的定位是 Node 全栈,以大前端为主,Node 辅助,把所有和用户直接相关的开发囊括。他认为这是趋势,他也在自身的经历中体验到了好处。而大前端目前没有形成固定模式,还在混乱发展,所以前景是非常看好的。

但他认为“笃定 Node”和“技多不压身”的观点不冲突,一个前端领域已经足够复杂,如果是大前端涵盖得更广,可谓进可攻退可守。在这种背景下,Node 其实是增加自身附加值的。个人经历优先,无法覆盖更多,这样的定位也算是另外一种专注吧。

6 大局观:多思考、多折腾、多更新

“年轻时死磕,年长点让小弟死磕,现在抓个专家一起吃饭,没有什么是一顿饭解决不了的,不行就二顿”,这句话虽然是调侃,但也是实话,每个阶段做好每个阶段该做的事儿就好。有一句名言说的特别好,“高筑墙,广积粮,缓称王”。

大部分人都会认为 30 岁后事情,压力会明显大得多,比如家庭,孩子,房子,车子,票子,甚至是管理,权利,欲望等。对此,狼叔印象最深的是身体不如从前和记忆力明显下降。

拥有一个好的大局观,没有捷径,就是多折腾。以前看事情是点,现在看的是趋势,能够做到心中有数,自然胸有成竹的感觉。技术发展这么快,作为一个一把年纪的人,每天也需要适当的投入一点精力关注开源,需要不断的更新自己,才不会让自己的大局观过时。

PWA 技术在阿里体系内是如何实践及应用、腾讯基于 Cocos 改造 Hybrid 形式产品、腾讯顶级人工智能实验室的 AI 终端产品实践、微服务平台下基于 GraphQL 构建 BFF 的实践与思考、Vue 服务端渲染在快手直播中的应用...... 更多最新最热的大前端技术议题即将来袭。

GMTC2018 上,来自 Google、Facebook、BAT 等 60 国内外一线前端大牛,将与你面对面探讨大前端领域最新技术趋势和实践。扫描下方二维码或点击“阅读原文”解锁更多大会详情!

,