Node.js 2016 回顾以及2017展望(转自 i5ting )

Node.js 2016 回顾

1)Node.js版本变化

https://github.com/nodejs/LTS#lts-schedule

  • 发布Node.js 6.x 并进入LTS(长期支持版本),凡是LTS的都可以在生成环境使用
  • 发布Node.js 7.x 支持Async/await,尽管需要加flag才可以开启

根据node.green统计Node.js 6.x(LTS下面)的es 2015即es6兼容99%

Node.js 6.x支持的10大关键特性

    1. DevTools Inspector Integration
    1. Capture Names of Listeners on an EventEmitter
    1. Overhauled Buffers Constructor APIs
    1. Unhandled Promise rejection warnings
    1. Quick and Safe Temporary Directory Creation
    1. Timing Attack Prevention
    1. Process Warnings API
    1. Symlink Preservation
    1. V8 Performance Profiling Directly Through Node.js
    1. Process CPU usage

2)Node.js在2016年被哪些企业使用?

  • 高朋使用Node.js重建了整个Web层

作为决策的结果,高朋团队使用Node.js重建整个Web层

他们在多个平台使用Node:

  1. 大概3-400个后端服务使用Nde.js Java和Ruby混合
  2. 使用Node作为API集成层。
  3. 使用Node作为后端服务的客户端,包括网站。

当前,高朋有70个Node.js生产应用。应用在30个国家。

  • Node.js在Skycatch应用

skycatch是家数据公司,帮助捕获、管理和分析商业无人机数据。skycatch看到挖掘数据需要大量查询数据库。使用现有的工具如原始SQL查询是困难和耗时的,而skycatch的解决方案可以方便地从网站中提取可操作的数据。

“我们在你能想得到的地方都使用了node - Node是我们的胶水”。

  • Node.js在Lowe’s Home Improvement 应用

通过Node.js,工程师队可以拥有从UI到后端整个堆栈的全部开发职责,前端他们能够重用自己在JavaScript和HTML上的精通。

现在他们可以很快地把新的功能放一起做原型设计做研究和做一些用户测试。然后把这个想法应用到生产级别并发布,不会导致应用程序栈其他部分的风险

原文http://www.jdon.com/48441

上面是国外的一些,据我所知很多大公司都用Node.js只是没人出来讲而已,创业公司就更加数不胜数了。

调查一下,用Koa的公司来顶一下 这个帖子,7个月之前,统计Koa都很20家左右,所以整体来看,普及力度还不错的。

3)left-pad事件

2016年3月份,kik是Azer写的模块,但Kik同时是手机通信录的社交软件,所以这个社交软件上就无耻的直接说让Azer把kik名字给他们,Azer不同意,他们就拿律师函恐吓,并让npm妥协,所以npm就妥协了

Azer一怒之下将自己在 npm 上的 273 个封包全部撤下,其中就包括 left-pad 封包。一石激起千层浪,依赖 left-pad 的上千个项目包括 babel 和 react-native 瞬间崩溃。大量开发者看着自己项目构建失败,顿时被吓尿。

观点

  • 1)就没见过这么傻逼的公司,一个红包就能解决的事儿,非要用强权,如果对方在改模块上耗费心血少的话,转给你也没啥问题的。去年百度从我手里要走了一个模块,一个红包而已
  • 2)11行代码要不要封装成一个包?

sindresorhus: Containing complexity is not about putting everything in one-line functions/modules.

你的模块必须含有一定的复杂性,不然就没啥意义了。

  • 3)npm看着那么多包,大多数都是无意义的吧?

从我开始讲Node.js全栈大约是3月份,那是npm上是25.6万个吧,截止到年底是35万个,我想说的是那个包仓库都是有好有坏,按照80/20原则,数量是也是相当可观的。总比那些某些语言连包管理机制都不完善的要强吧!

  • 4)结果npm调整了撤销策略,24小时之后就不让撤销了

If the version is less than 24 hours old, you can unpublish it. The package will be completely removed from the registry.

http://blog.npmjs.org/post/141905368000/changes-to-npms-unpublish-policy

4)Yarn:一个高效的npm替代品

2016年10月份, Facebook 和 Google 联手搞出 Yarn,你一个新的包管理器。一周之内,在github上star过万,现在已经21843个star了。

替换的原因

  • 在Facebook的大规模 npm 都工作的不太好
  • npm拖慢了公司的ci工作流
  • 对一个检查所有的模块也是相当低效的
  • npm被设计为是不确定性的,而Facebook工程师需要为他们的DevOps工作流提供一直和可依赖的系统

与hack npm限制的做法相反,Facebook编写了Yarn

  • Yarn 的本地缓存文件做的更好
  • Yarn 可以并行它的一些操作,这加速了对新模块的安装处理
  • Yarn 使用lockfiles,并用确定的算法来创建一个所有跨机器上都一样的文件
  • 出于安全考虑,在安装进程里,Yarn 不允许编写包的开发者去执行其他代码

Yarn, which promises to even give developers that don’t work at Facebook’s scale a major performance boost, still uses the npm registry and is essentially a drop-in replacement for the npm client.

很多人说和ruby的gem机制类似,都生成lockfile。确实是一个很不错的改进,在速度上有很大改进,配置cnpm等国内源来用,还是相当爽的。

5)Chrome DevTools支持Node.js 应用调试了!

https://blog.hospodarets.com/nodejs-debugging-in-chrome-devtools

要求

    1. Node.js 6.3+
    1. Chrome 55+

步骤

  • 开启chrome://flags/#enable-devtools-experiments URL
  • 启动 Developer Tools experiments flag
  • 重启 Chrome
  • 打开 DevTools Setting -> Experiments tab (重启之后的才能看见)
  • 按下 “SHIFT” 6 次
  • 选中 “Node debugging” 复选框
  • 打开/关闭 DevTools

https://blog.hospodarets.com/nodejs-debugging-in-chrome-devtools

另外推荐一个electron包装的devtool,也非常好

https://github.com/Jam3/devtool

6)lerna:一个用户管理多个包模块的工具。

https://lernajs.io/

非常好用,babel等都大量应用

7)Flow和Typescript越来越流行

Flow 是一个新的开源JavaScript静态类型检查器给JavaScript增加了静态类型来提高开发人员的生产力和代码质量。特别是,静态类型提供了一些极大的助益,如前期错误检测,它可以帮助您避免某些种运行时故障;如代码的智能提示,这有助于代码维护、导航、转换和优化。

TypeScript是JavaScript类型(es6)的超集,它可以编译成纯JavaScript。可以在任何浏览器、任何计算机和任何操作系统上运行,并且是开源的。类型检查啊也是非常棒的。

由于大规模和深度js应用,导致js编写复杂性越来越高,而且又要多人合作,所以对于静态类型的需求会尤其大,flow相对更加轻量级,ts更加像一揽子解决方案。以我的观察,flow就是react这阵风带起来的,喜欢轻量级的可以考虑,长久来看,ts可能会有更大的发展潜力。我相信在2017年ts会有更好的成长,无论是前端,还是Node.js,都会大量应用。

8)异步流程演进

这里加异步流程演进部分,目的是为了后面讲述框架变化做铺垫,同时异步流程控制也是Node.js非常核心的内容,是每个开发者都必须掌握的。

JavaScript流程控制的演进过程,分以下6部分:

  1. 同步代码
  2. 异步JavaScript: callback hell
  3. Thunk
  4. Promise/a+
  5. 生成器Generators/yield
  6. Async函数/Await(以前说是ES7 stage-3)

看起来挺简单的,作为*js(沾边)工程师的各位自测一下,当前是哪个阶段?

我对异步流程控制的总结

  • Async函数是趋势,如果Chrome 52. v8 5.1已经支持Async函数(https://github.com/nodejs/CTC/issues/7)了,Node.js已经支持,Node.js 7.x版本需要加flag才能开启,在明年的8.x里会默认开启。
  • Async和Generator函数里都支持promise,所以promise是必须会的。
  • Generator和yield异常强大,不过不会成为主流,所以学会基本用法和promise就好了,没必要所有的都必须会。
  • co作为Generator执行器是不错的,它更好的是当做Promise 包装器,通过Generator支持yieldable,最后返回Promise,是不是有点无耻?

我整理了一张图,更直观一些。

  • 红色代表Promise,是使用最多的,无论async还是generator都可用
  • 蓝色是Generator,过度货
  • 绿色是Async函数,趋势

结论:Promise是必须会的,那你为什么不顺势而为呢?

推荐:使用Async函数 + Promise组合,如下图所示。

9) vsc是一个比较潮比较新的编辑器

(跨平台Mac OS X、Windows和 Linux )

  • vsc功能和textmate、sublime、notepad++,ultraedit等比较,毫不逊色
  • vsc尤其是在nodejs(调试)和typescript、go上支持尤其好
  • vsc提供了自定义 Debugger Adapter 和 VSCode Debug Protocol 从而实现自己的调试器

vsc的宣传语是:

 一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器。

按它说的,vsc特别适合来作为前端开发编辑器。

内置html开发神器emmet(zencoding),对css及其相关编译型语言Less和Sass都有很好的支持。

当然,最nice的还是写js代码了,这也是我接下来要着重介绍的功能。

目前vsc已经开源了:

https://github.com/i5ting/vsc

12 回复

i5ting 1楼?7 天前

Node.js 的应用场景

Node.js能干什么?

  • 网站(如express/koa等)
  • im即时聊天(socket.io)
  • api(移动端,pc,h5)
  • http proxy(淘宝首页)
  • http proxy延伸,组装rpc服务,作为微服务的一部分
  • 前端构建工具(grunt/gulp/bower/webpack/fis3…)
  • 写操作系统(NodeOS)
  • 跨平台打包工具(nw.js、electron、cordova/phonegap)
  • 命令行工具(比如cordova)
  • 编辑器(atom,vscode)

前端工具

先区分2个概念:Web Server和Application Server

  • Web Server

当Web Server接收到一个HTTP request的时候,它会以HTTP response的形式相应这个请求,也就是返回一个HTML页面, Web Server可以响应一个静态的HTTP页面,也可以转发或者代理请求到其他的服务端脚本引擎(CGI, JSP或者ASP、PHP、Node.js等等),然后返回一个动态的相应。不管以什么样的服务端技术, Web Server大多说情况都只是以HTML德形式返回一个HTTP响应。

  • Application Server

根据Application Server的定义, Application Server是为客户端应用提供业务逻辑,它与客户端应用的交互可以通过多种协议,其中也包括HTTP协议, 一个Web Server主要是处理HTTP请求,发送HTML到浏览器,而Application Server为客户端应用提供了访问业务逻辑的接口。客户段应用可以像调用一个对象的方法一样调用这些业务逻辑。

使用Node.js做Web Server

apache、nginx等http server,主要提供静态http服务和反向代理

  • 静态文件托管,比如js、css等,效率会比较高

但有一个问题,如果你期望的文件要处理header或者其他变态请求,nginx就没法给你处理(nginx + lua也是可以,但比较麻烦),这是使用Node.js的server就会非常好用。

纯http来看,nginx和node能够的功能是非常类似的,我们做的最多的是nginx挡在node前面,所以很多人都不太清楚这个点。

使用Node.js处理静态资源,单机过亿次是轻轻松松的。

使用Node.js做Web Server

这就是我们大部分理解的Node.js作用。动不动就Express或Koa,连接数据库crud等

proxy 2种

反向代理

反向代理功能同nginx,这里不细讲,Node.js也有模块可以完成一样的功能,如果会Node.js比玩nginx要简单

应用层面的代理

比如淘宝基于Node的前后端分离

这里的Node.js服务

  • 1)对接前端,给前端渲染提供数据
  • 2)抽象了model proxy,用于完成各种接口对接

一般大型网站都会非常复杂,做个了很多版本升级、重构,那么必然会慢慢的向服务化靠拢,无论是SOA还是微服务,都会提供非常多的服务,而且各种协议都有,那么你的前端要怎么处理呢?

放到前端来说,肯定是不好的,所以比较合理的方式就是在服务和前端直接,增加Node.js作为代理。

我希望在2017年这个地方能够做的更好

  • 服务组装(rpc)
  • bigpipe
  • server-side render

i5ting 2楼?7 天前

如何做框架选型?

Node.js从2009横空出世之后,至今已经7年有余,各种web框架也林林总总,目前大约在npm上有35万左右包,刨去前端和一些无意义的封装,也是有非常可观的优秀的模块的。其中web框架也是特别抢眼的,从早期的express到现在koa,对异步流程控制的改进前仆后继。随着移动端崛起面向api的框架hapi和restify也如火如荼,更有一些面向特性的框架,比如thinkjs对es6/es7/typescript支持,整体来说,质量都是非常不错的,算百花齐放,还是那句话,即使不优化,你也能用这些框架获得较高的性能。

很多人都争论这个问题,不同的leader也有不同的解决方案,那么,如何做框架选型呢?我总结了一下,大概有3个决定因素

  • 场景,是做api还是管理后台,还是h5,不同的应用场景会有不一样的选择
  • 团队能力,如果团队Node.js经验非常丰富就无所谓,如果不是特别熟,那就至少要有一个人能cover住,如果都没有,那就挑选最成熟的最保守的做吧
  • 趋势,如果leader大局观不错,综合上面2点,再辅以趋势的话,就非常好,毕竟现在技术革新太快,别你刚学会,别人都不用了,也是比较痛苦的。

无论如何,至少要有一个人能cover住,这是我选型的根本,框架再好,也不是给你设计的,所以难免会各有各种各样的问题,那么你就只有一个选择了

f**k = fork or fuck

要么fork了自己改,要么what the fuck。。。

i5ting 3楼?7 天前

Node.js 2017 展望

  • 前端工具类继续作为基础设施普及
  • 会出现更多为js的全栈程序员,前端水平会有质的提高,也会甩掉一批人
  • 作为Proxy,服务组装部分,应该可以再拿下一部分
  • 大量普通Typescript
  • 异步流程控制方面,普及Async,但会有相当长的一段时间是 普及Async + Promise共存
  • 期待Node.js 8.x版本,完美支持Async/await
  • Koa 2.x以及基于Koa 2.x的async版本普及
  • 如果可以,Node.js能够在cup密集任务方面有提供就更好了

i5ting 4楼?7 天前

写在最后

在2017年,Node.js会往后端继续前进,如果能够把rpc服务组装部分做好,我觉得就非常好了。随着React、Vue、Typescript、Flow、Lerna、Webpack、Vscode等带动,Node.js一定会取得更辉煌的成绩!

时间: 2024-12-22 22:28:07

Node.js 2016 回顾以及2017展望(转自 i5ting )的相关文章

Node.js基础回顾

原文地址:Node.js基础回顾 原文地址:https://www.cnblogs.com/edward852/p/8580887.html

2016总结与2017展望

又到了一年中的最后一天,给自己个总结吧,然后再为新的一年,哦不,应该是未来的几年设定一个目标.人生不能老是这样只看眼前嘛,必须要为长远做一下计划了,否则总是感觉日子过得忙忙碌碌稀里糊涂的. 工作篇 应该从2015年10月份总结起来吧.那时公司进行了一次大规模裁员,从此开启了一段新的工作经历.从原来只是接触边缘业务的开发人员,变成了接触核心业务的开发人员.这一年来做了大4个大项目和一些维护性的项目,对公司的两个重要业务都有了很多的了解,自己能够从整体架构宏观上考虑问题,这点是有一定进步的.但是明显

Node.js abaike图片批量下载Node.js爬虫1.00版

这个与前作的差别在于地址的不规律性,需要找到下一页的地址再爬过去找. //====================================================== // abaike图片批量下载Node.js爬虫1.00 // 2017年11月9日 //====================================================== // 内置http模块 var http=require("http"); // 内置文件处理模块,用于创

Node.js 8有哪些重要功能和修复?

5月30日12点,Node.js 8正式发布了,这个版本具有一系列新功能和性能改进,并且这些功能和改进将获得长期支持(LTS). 下面就来介绍Node.js 8版本中最重要的功能和修复. 新版本的代号是Carbon.Node.js 8将从2017年10月起,正式成为当前的LTS版本,并持续到2019年12月31日.这也意味着Node.js 6版本将在2018年4月进入到维护模式,并在2019年4月结束维护支持. 下载Node.js 8版本:https://nodejs.org/download/

Node.js meitulu图片批量下载爬虫1.01版

在 http://www.cnblogs.com/xiandedanteng/p/7614051.html 一文我曾经书写过一个图片下载爬虫,但原有程序不是为下载图片而设计故有些绕,于是稍微改写了一下,可读性应该稍好些.功能上和原程序差不多,只是输出目录不是固定在test目录了.代码如下: //================================================ // https://www.meitulu.com图片批量下载Node.js爬虫1.01 // 2017

Node.js aitaotu图片批量下载Node.js爬虫1.00版

即使是https网页,解析的方式也不是一致的,需要多试试. 代码: //====================================================== // aitaotu图片批量下载Node.js爬虫1.00 // 2017年11月14日 //====================================================== // 内置http模块 var https=require("https"); // 内置文件处理模块,

回顾2015,展望2016

不知不觉,2015年就这样过去了,也就是说我从事前端开发已经一年多了.时间快的完全不等人. 我是从学药的转行做前端的,相对于学药,我对前端的爱大太多太多.经过这一年的学习,发觉深处前端这个行业有时候很令人急躁.因为一年当中有太多太多的新技术出现,太 多太多的东西需要学习,如果你学习的速度稍微慢一点,那你就会落后很多很多.所以,想给自己的2015来一个总结. 2015年学习了很多新技术,不过很多新技术只是大概了解了一下,很多是没有用到实际的项目当中,这个也是令我烦恼的一件事,因为你没有在项目中用你

Node.js 面试问题及答案(2017 版)

阅读原文 两年前,我们发布了我们的第一篇关于 Node.js 面试的文章 Node.js 面试常见问题和答案,近两年,JavaScript 和 Node.js 生态系统有了很多更新和发展,因此,是该更新这些面试问题和答案的时候了. 免责声明(重要) 仅仅通过面试问题去评价一个面试者,从来都不是一个好的选择.但是这些问题可以让你大体了解面试者在 Node.js 开发上的经验. 当然,这些问题并不能全面反映一个人的思维方式和开发习惯. 我相信,开发中遇到的问题,更能反映面试者的知识水平 - 所以,我

如何在2016年成为一个更好的Node.js开发者

本文主要讨论一些进行Node.js开发的最佳实践和建议,这些建议不仅仅适合开发者,还适合那些管理与维护Node.js基础架构的工作人员.遵循本文提供的这些建议,能够让你更好的进行日常的开发工作. Statement 原文地址:https://blog.risingstack.com/how-to-become-a-better-node-js-developer-in-2016/ 译者:景庄,Web开发者,主要关注JavaScript.Node.js.React.Docker等. 使用ES201