导读:6 月 1 ~ 2 日,GIAC 全球互联网架构大会将于深圳举行。GIAC 是一个面向架构师、技术负责人及高端技术从业人员的技术架构大会。今年的 GIAC 已经有腾讯、阿里巴巴、百度、今日头条、科大讯飞、新浪微博、小米、美图、Oracle、链家、唯品会、京东、饿了么、美团点评、罗辑思维、ofo 等公司专家出席。

在大会前夕,高可用架构采访了本届 GIAC大前端技术分论坛 出品人桑世龙,就目大家广泛关注的前端技术方面的问题进行了访谈。

桑世龙,江湖人称狼叔(网名i5ting)现为阿里巴巴前端技术专家,前去哪儿网前端架构师,Node.js 技术布道者,Node全栈公众号运营者。目前主要关注技术架构和团队梯队建设方向。即将出版《更了不起的Node.js:将下一代web框架Koa进行到底》一书。


高可用架构:狼叔好,很荣幸能有机会来采访您。首先,众所周知你是Node JS在国内的布道师,能否谈谈目前Node发展的现状?

桑世龙:目前国内Node.js主要是作为前端基础设施存在的,但Node.js目前已经横跨三端:移动端(phonegap/cordova),pc/h5,pc客户端(electron/nw.js)1)前端提效工具,比如脚手架,构建工具等 2)辅助前端提升性能,比如利用bigpipe提高性能,pwa/amp等 3)开发各种前端相关系统,比如流量统计,日志,配置中心,管理后台等。

俨然,Node.js是前端提效最好的工具,但很明显这和Node.js初衷是违背的,Node.js是为解决并简化服务器端编程而诞生的。目前Java依然是后端主流开发,任何新型语言都很难占有很大份额,Node.js也一样,目前中小公司,创业公司用node做后端的比较多,纯前端类的相关系统也是Node.js比较多。这块在未来会有一定比例份额,在微服务的架构下,任何语言都有机会,只是喜好问题。另外随着TypeScript的流行,能够让更多的后端同学习惯Node.js的。

高可用架构:Node是一门服务端的编程语言,能谈谈他在性能方面的表现,以及Node当下比较好的应用场景?

桑世龙:Node.js的性能整体来说还是相当不错的,在诞生之初,因异步吊打各种语言,一战成名。但随着时间的变化,各语言也都在成长,比如ruby、php都有极其明显的性能提升,甚至Java也能引入了异步编程,所以性能大家都没有特别明显的优势。

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

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

  • 1)利益分配,已有实现大多是Java或者其他语言,基本是没法撼动的,重写的成本是巨大的,另外,如果用Node写了,那么那些写Java的人怎么办?抢人饭碗,这是要拼命的。

  • 2)Node相对年轻,大家对Node的理解不够,回调和异步流程控制略麻烦,很多架构师都不愿意花时间去学习。尽管在Web应用部分处理起来非常简单高效,但在遇到问题时并不容易排查定位,对开发者水平要求略高。

  • 3)开发者技能单一,很多是从前端转过来的,对数据库,架构方面知识欠缺,对系统设计也知之不多,这是很危险的,有种麻杆打狼两头害怕的感觉。

  • 4)Node在科普、培训、布道等方面做的并不好,国外使用的非常多,国内却很少人知道,不如某些语言做得好。

当下来说,服务器资源已经相当便宜,对我们的挑战是如何处理开发速度和性能的场景取舍。

  • 1)开发速度第一,当然是Ruby、Node类的更好

  • 2)在初期,原型验证等,Node是非常好的

  • 3)在特定场景,可以考虑Go来进行增强

Node.js 应用场景非常丰富,比如 Node.js 可以开发操作系统,但一般我都不讲的,就算说了也没多大意义,难道大家真的会用吗?一般,我习惯将 Node.js 应用场景氛围7个部分。

  • 1)初衷,server端,不想成了前端开发的基础设施

  • 2)命令行辅助工具,甚至可以是运维

  • 3)移动端:cordova,pc端:nw.js和electron

  • 4)组件化,构建,代理

  • 5)架构,前后端分离、api proxy

  • 6)性能优化、反爬虫与爬虫

  • 7) 全栈最便捷之路

之前已经讲过很多了,这里再列出一些,以便读者能够更好的了解 Node.js,

编号 场景 说明
1 反向代理 Node.js可以作为nginx这样的反向代理,虽然线上我们很少这样做,但它确确实实可以这样做。比如node-http-proxy和anyproxy等,其实使用Node.js做这种请求转发是非常简单的,在后面的http章节里,有单独的讲解。
2 爬虫 有大量的爬虫模块,比如node-crawler等,写起来比python要简单一些,尤其搭配jsdom(node版本的jQuery)类库的,对前端来说尤其友好
3 命令行工具 所有辅助开发,运维,提高效率等等可以用cli做的,使用node来开发都非常合适,是编写命令行工具最简单的方式,java8以后也参考了node的命令行实现
4 微服务与RPC node里有各种rpc支持,比如node编写的dnode,seneca,也有跨语言支持的grpc,足够应用了
5 微信公众号开发 相关sdk,框架非常多,是快速开发的利器
6 前端流行SSR && PWA SSR是服务器端渲染,PWA是渐进式Web应用,都是今年最火的技术。如果大家用过,一定对Node.js不陌生。比如React、Vuejs都是Node.js实现的ssr。至于pwa的service-worker也是Node.js实现的。那么为啥不用其他语言实现呢?不是其他语言不能实现,而是使用Node.js简单、方便、学习成本低,轻松获得高性能,如果用其他语言,我至少还得装环境


高可用架构:移动互联网时代,服务端更多提供的是API的接口,对API的开发框架,有哪些方面的推荐?他们的优点是哪些?

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

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

  • 透传接口,对于内网或者非安全接口,可以采用中间层透传。

  • 聚合接口,对异构API处理非常方便,如果能够梳理model,应变更容易。

  • Mock接口,通过Mock接口,提供前端开发效率,对流程优化效果极其明显,比如去哪儿开发的yapi就是专门解决这个问题的。

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

1)静态Api

静态Api在Node.js世界里的实现有很多种方式,比如简单的基于 Express / Koa 这样成熟的框架,也可以采用专门的静态Api框架,比如著名的 typicode/json-server,想实现REST API,你只需要编辑db.json,放入你的数据即可。

启动服务器

此时访问网址 http://localhost:3000/posts/1,即我们刚才仿造的静态Api 接口,返回数据如下

2)服务器端Api

服务器端Api的要点:稳定,高效,生态完备。选用Node.js的好处就是因为它的简单高效。基础框架除了应用最广泛的主流Web框架Koa外,Fastify也是一直劲敌,作者 Matteo Collina 是 Node.js 核心开发,Stream 掌门,性能优化专家。Fastify 基于 Schema 优化,对性能提升极其明显。当然,最值得说明的,我认为是企业级Web开发,这里简单介绍3个知名框架。

Egg.js

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

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

Nest

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

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

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

ThinkJS

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

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

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

高可用架构:现在区块链非常火,也有很多项目直接使用Node,也有一些项目支持Node,针对这块您是否了解?也谈谈您的看法?

桑世龙:对于区块链开发来说,一个主要的方向是以太坊的智能合约,solidity主要是采用c/c++开发,这对很多开发来说还是有些难度的。于是有了http://truffleframework.com/这样的Node.js框架,通过Node.js的addon把solidity的c++接口封装成js api,这样就极大的简化了开发。当然,问题也是有的,限于js语言的局限,还是有很多问题的,比如类型,数值精度等。

我对区块链掌握的有限,但其价值还是相当认可。另外参加Google IO,了解到tessorflow的Node.js版本tfjs,具有非常好的性能和易用性,也是假货的方向。如果有机会,推荐大家使用Node.js来做ai和区块链应用。

高可用架构:众所周知狼叔是一个牛的全栈工程师,而现在在互联网行业全栈工程师也非常吃香,您觉得怎样才能成为一个好的全栈工程师?

桑世龙:每次演讲我会都问大家是不是前端,回答“是”的人非常多,我会开玩笑的恭喜大家:“现在的前端就是钱端”,确实,现在前端发展异常的快,而且没有趋向于类比java里ssh框架的那种稳定,所以未来很长一段时间,还会增长,持续混乱,这对前端来说是把双刃剑,一方面有很强的压迫感,不学习就跟不上时代,另一方它也是机遇,能够带给更多机会,包括money。

大家都疑惑的一个问题是如何在这样巨变的时代能够通过学习来应变,我可以很负责的告诉大家,没有捷径,但通过掌握 Node.js 能够让你降低这个学习曲线而已,毕竟Node.js是大前端的基础设施。大家可以看一下,前端的开发过程,模块化,构建,辅助工具,调优,架构调整,可以说Node.js是无处不在的。

其实,辅助大前端开发只是Node.js的一个非常无心插柳的衍生功能,通过掌握Node.js能够让你能做的更多、获得的更多,甚至可以说有更多自我实现的快乐,这也是我那本书书名字里“更了不起的”要去阐述的内容。

综上种种,就是我一直提倡以 JavaScript 语言为中心的 Node全栈概念的缘由,JavaScript 覆盖所有前端,Node.js 擅长做 I/O 密集型的后端,外加辅助开发的各种基础设施,无疑是工作、学习和成为快速掌握全栈技术最好的途径。你会的越多,你能做的就更多,你的人生也将会有不一样的精彩篇章。

全栈核心

  • 后端不会的 UI(界面相关)

  • 前端不会的 DB(业务相关)

只要打通这2个要点,其他就比较容易了。最怕的是哪样都接触点,然后就号称自己是全栈,建议大家不要这样做,这就好比在简历里写精通一样,基本上都会被问到尴尬。全栈是一种信仰,不是拿来吹牛逼的,而可以解决更多问题,让自己的知识体系不留空白,享受自我实现的极致快乐。

高可用架构:听说您在写一本关于Node的书,能透露下您这边书的内容,以及写书的缘由和目的么?

桑世龙:是在写一本《更了不起的Node.js》,这个题目有点大,三月已截稿,却迟迟不敢发,再完善一下。当前Node.js的应用场景和3年前变化极大,是时候给大家来梳理一下具体的知识体系。

《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大类

  • 1)跨平台:覆盖你能想到的面向用户的所有平台,传统的PC Web端,以及PC客户端 nw.js/electron 、移动端 cordova、HTML5、react-nativeweex,硬件 ruff.io 等

  • 2)Web应用开发:网站、Api、RPC服务等

  • 3)前端:三大框架 React \ Vue \ Angular 辅助开发,以及工程化演进过程(使用Gulp /Webpack 构建 Web 开发工具)

  • 4)工具:npm上各种工具模块,包括各种前端预编译、构建工具 Grunt / Gulp、脚手架,命令行工具,各种奇技淫巧等

下面列出具体的 Node.js 的使用场景,以模块维度划分

分类 描述 相关模块
网站 类似于 cnodejs.org这样传统的网站 Express / Koa
Api 同时提供给移动端,PC,H5 等前端使用的 HTTP Api 接口 Restify / HApi
Api代理 为前端提供的,主要对后端Api接口进行再处理,以便更多的适应前端开发 Express / Koa
IM即时聊天 实时应用,很多是基于 WebSocket协议的 Socket.io / sockjs
反向代理 提供类似于 nginx 反向代理功能,但对前端更友好 anyproxy / node-http-proxy / hiproxy
前端构建工具 辅助前端开发,尤其是各种预编译,构建相关的工具,能够极大的提高前端开发效率 Grunt / Gulp / Bower / Webpack / Fis3 / YKit
命令行工具 使用命令行是非常酷的方式,前端开发自定义了很多相关工具,无论是shell命令,node脚本,还是各种脚手架等,几乎每个公司\小组都会自己的命令行工具集 Cordova / Shell.js
操作系统 有实现,但估计不太会有人用 NodeOS
跨平台打包工具 使用 Web 开发技术开发PC客户端是目前最流行的方式,会有更多前端开发工具是采用这种方式的 PC端的electron、nw.js,比如钉钉PC客户端、微信小程序IDE、微信客户端,移动的Cordova,即老的Phonegap,还有更加有名的一站式开发框架Ionicframework
P2P 区块链开发、BT客户端 webtorrent / ipfs
编辑器 Atom 和 VSCode都是基于 electron模块的 electron
物联网与硬件 ruff.io和很多硬件都支持node sdk ruff


高可用架构:本次GIAC大会,您对那些主题比较感兴趣? 能稍微透露下您此次大会的分享内容以及您对GIAC大会有哪些期望?

桑世龙:我个人还是对区块链和Ai相关内容更感兴趣。当然,作为前端,一下主题也是我非常感兴趣的。

  • ReactNative替代方案plato在腾讯课堂App中的实践,腾讯的朋友讲,据说分上下场,应该是非常有趣的异常

  • Nodejs微服务架构之路,是阿里的朋友讲,这部分国内讲的不多,算当下最佳实践,我还是非常希望Nodejs微服务架构可以真正普及,让更多人受益的。

  • webassembly在全民直播的应用,WA是新技术,将各种语言编译成js以弥补js的性能问题。在Google IO大会上,也有WA的主题,收益匪浅,相信WA在直播领域的尝试也是非常有远见卓识的。

本文采访编辑朱磊,技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。

本期 GIAC 大会上,大前端部分的精彩议题如下:

参加 GIAC,盘点2018最新技术。点击“阅读原文”了解大会更多详情。

全栈工程师是如何炼成的?Node大神狼叔访谈相关推荐

  1. 懂代码且抢手的全栈设计师是怎样炼成的?

    点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 随着互联网行业的发展,UI设计师越来越多的被提及,UI设计师大火,薪资水平也是一路 ...

  2. 为啥大公司只要全栈工程师?

    全栈工程师(Full-Stack Engineer),是一个在IT行业圈子里越来越热门的话题,无论是像Facebook这样的大型公司,还是刚刚起步的初创公司,都开始招募全栈工程师.在OSCON会议上, ...

  3. 《web全栈工程师的自我修养》阅读笔记

    在买之前以为这本书是教你怎么去做一个web全栈工程师,以及介绍需要掌握的哪些技术的书,然而看的过程中才发现,是一本方法论的书.读起来的感觉有点像红衣教主的<我的互联网方法论>,以一些自己的 ...

  4. 全栈工程师15年经验分享:40个改变编程技能的小技巧

    白交 发自 凹非寺  量子位 报道 | 公众号 QbitAI 编程如何节省更多的时间,犯更少的错误? 最近,这样一份「心得」火了.这位名叫Kesk Noren的软件工程师在Medium上分享了一篇博文 ...

  5. 大写的服!用耳朵也能写代码?盲人程序员自学编程成为全栈工程师

    作者 | 年素清 责编 | 王晓曼 出品 | 程序人生 (ID:coder _life) 蔡勇斌幼年失明,靠着顽强的毅力和不服输的精神自学编程,成为了一名全栈工程师.作为一名盲人,为了让全中国的其他盲 ...

  6. HTML5好从业吗?为什么都热衷于HTML5全栈工程师呢?

    2017突然流行起来的一个新职位"全栈工程师".大概在很多人眼里,全栈工程师是一个全能人才,事实的确如此.以Web前端为主,需求.后台.前台.用户.设计等内容为辅.全栈工程师拥有更 ...

  7. 测试私有方法 重构_一个全栈工程师重构之路:中小公司 DevOps 落地实践

    为了这篇文章,我前后写了将近十篇文章铺垫,才将这篇整体重构思想引出. 背景 先说下背景,我们是一家小公司,虽然打着做产品的旗帜,但是每个客户都有大量的个性化功能,这里指各个客户的java端.Andro ...

  8. 全栈工程师薪水_2019Java 全栈工程师 进阶路线图!一定要收藏!

    互联网技术,更新迭代迅速,用日新月异来说也不为过,所以,面对这这种大环境,对于码农尤其是那些对于初入职场的新手来说,该如何自我学习升级,往方向发展,这一点是大家都经常困惑的. 大部分人,刚开始学习的J ...

  9. Web 的全栈工程师必修课 - 关于 MVC 框架

    本章我们将围绕 MVC 这个老而弥坚的架构模式展开方方面面的介绍,对于基于 Web 的全栈工程师来说,它是我们知识森林中心最茂密的一片区域,请继续打起精神,积极学习和思考. 无论是在 Web 全栈还是 ...

最新文章

  1. Google的面试题长啥样?看完被吊打!
  2. iOS进阶之底层原理-cache_t
  3. 《Linux内核原理与分析》第三周作业
  4. 【计算机基础】漫画:什么是 “设计模式” ?
  5. 创业中的“孙子兵法”
  6. 获取表单对象,得三种方法getElementById(), getElementsByName(), and getElementsByTagName() 和用法...
  7. C#LeetCode刷题之#892-三维形体的表面积(Surface Area of 3D Shapes)
  8. 论坛中的验证码的作用
  9. VMware虚拟机中大小写不停切换的问题
  10. 天若OCR文字识别本地版
  11. python入门自学软件手机版,python编程教学app
  12. scrapy下载图片(《精通scrapy网络爬虫》第九章)
  13. oracle min(date),Oracle / PLSQL MIN函数
  14. python配置geany教程视频_Python使用geany工具配置方法
  15. 最新出炉的阿里巴巴面试题及答案汇总(513页)
  16. 使用LOL盒子的数据查询简单的战斗力信息
  17. 蓝牙基带数据传输机理分析
  18. 基于Python实现的决策树模型
  19. l05173芯片针脚图_芯片引脚定义
  20. 2021年中国民航及其重点企业对比分析(中航集团VS东航集团VS南航集团VS海航集团)[图]

热门文章

  1. 攻防世界逆向高手进阶(持续更新)
  2. c语言scandir函数排序,关于C ++:如何在scandir中参数化选择函数
  3. 我和计算机学习的故事
  4. 迅雷总是提示更新升级的解决办法(超简单) win10
  5. dom4j_01_01
  6. c语言memcpy与strcpy,C语言:strcpy()和memcpy()
  7. 苹果手机数据丢失能恢复吗
  8. 文登丛氏一至八世世表
  9. Ai与Ps做卡通人物的区别
  10. 解决数据量大造成卡顿 ---- 事件委托