狼叔说:2016 年 Node.js 世界也是够精彩的,从 let-pad 事件到 Node.js 支持 Async/await,无疑都是非常吸引眼球的本文试图回顾一下 2016 年 Node.js 大事记,然后给出 Node.js 的应用场景以及技术如何选型, 着重介绍 Proxy 应用层的内容 ,以此推导出我对的 Node.js 2017 年的展望,最后祝大家新年快乐, 用 Node.js,快乐的写代码,有问题上 Cnode ,狼叔给你们一起加油,有问必答!
https://github.com/nodejs/LTS#lts-schedule
根据 node.green 统计 Node.js 6.x(LTS 下面)的 es 2015 即 es6 兼容 99%
Node.js 6.x 支持的 10 大关键特性
作为决策的结果,高朋团队使用 Node.js 重建整个 Web 层
他们在多个平台使用 Node:
当前,高朋有 70 个 Node.js 生产应用。应用在 30 个国家。
skycatch 是家数据公司,帮助捕获、管理和分析商业无人机数据。skycatch 看到挖掘数据需要大量查询数据库。使用现有的工具如原始 SQL 查询是困难和耗时的,而 skycatch 的解决方案可以方便地从网站中提取可操作的数据。
"我们在你能想得到的地方都使用了 node - Node 是我们的胶水"。
通过 Node.js,工程师队可以拥有从 UI 到后端整个堆栈的全部开发职责,前端他们能够重用自己在 JavaScript 和 html 上的精通。
现在他们可以很快地把新的功能放一起做原型设计做研究和做一些用户测试。然后把这个想法应用到生产级别并发布,不会导致应用程序栈其他部分的风险
原文 http://www.jdon.com/48441
上面是国外的一些,据我所知很多大公司都用 Node.js 只是没人出来讲而已,创业公司就更加数不胜数了。
调查一下,用 Koa 的公司来顶一下 这个帖子,7 个月之前,统计 Koa 都很 20 家左右,所以整体来看,普及力度还不错的。
2016 年 3 月份,kik 是 Azer 写的模块,但 Kik 同时是手机通信录的社交软件,所以这个社交软件上就无耻的直接说让 Azer 把 kik 名字给他们,Azer 不同意,他们就拿律师函恐吓,并让 npm 妥协,所以 npm 就妥协了
Azer 一怒之下将自己在 npm 上的 273 个封包全部撤下,其中就包括 left-pad 封包。一石激起千层浪,依赖 left-pad 的上千个项目包括 babel 和 react-native 瞬间崩溃。大量开发者看着自己项目构建失败,顿时被吓尿。
观点
sindresorhus: Containing complexity is not about putting everything in one-line functions/modules.
你的模块必须含有一定的复杂性,不然就没啥意义了。
从我开始讲 Node.js 全栈 大约是 3 月份,那是 npm 上是 25.6 万个吧,截止到年底是 35 万个,我想说的是那个包仓库都是有好有坏,按照 80/20 原则,数量是也是相当可观的。总比那些某些语言连包管理机制都不完善的要强吧!
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
2016 年 10 月份, Facebook 和 Google 联手搞出 Yarn,你一个新的包管理器。一周之内,在 github 上 star 过万,现在已经 21843 个 star 了。
替换的原因
与 hack npm 限制的做法相反,Facebook 编写了 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 等国内源来用,还是相当爽的。
https://blog.hospodarets.com/nodejs-debugging-in-chrome-devtools
要求
步骤
https://blog.hospodarets.com/nodejs-debugging-in-chrome-devtools
另外推荐一个 electron 包装的 devtool,也非常好
https://github.com/Jam3/devtool
https://lernajs.io/
非常好用,babel 等都大量应用
Flow 是一个新的开源 JavaScript 静态类型检查器给 JavaScript 增加了静态类型来提高开发人员的生产力和代码质量。特别是,静态类型提供了一些极大的助益,如前期错误检测,它可以帮助您避免某些种运行时故障;如代码的智能提示,这有助于代码维护、导航、转换和优化。
TypeScript 是 JavaScript 类型(es6)的超集,它可以编译成纯 JavaScript。可以在任何浏览器、任何计算机和任何操作系统上运行,并且是开源的。类型检查啊也是非常棒的。
由于大规模和深度 js 应用,导致 js 编写复杂性越来越高,而且又要多人合作,所以对于静态类型的需求会尤其大,flow 相对更加轻量级,ts 更加像一揽子解决方案。以我的观察,flow 就是 react 这阵风带起来的,喜欢轻量级的可以考虑,长久来看,ts 可能会有更大的发展潜力。我相信在 2017 年 ts 会有更好的成长,无论是前端,还是 Node.js,都会大量应用。
这里加异步流程演进部分,目的是为了后面讲述框架变化做铺垫,同时异步流程控制也是 Node.js 非常核心的内容,是每个开发者都必须掌握的。
JavaScript 流程控制的演进过程,分以下 6 部分:
看起来挺简单的,作为 * js(沾边)工程师的各位自测一下,当前是哪个阶段?
我对异步流程控制的总结
我整理了一张图,更直观一些。
结论 :Promise 是必须会的,那你为什么不顺势而为呢?
推荐 :使用 Async 函数 + Promise 组合,如下图所示。
(跨平台 Mac OS X、Windows 和 Linux )
vsc 的宣传语是:
- 一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器。
按它说的,vsc 特别适合来作为前端开发编辑器。
内置 html 开发神器 emmet(zencoding), 对 CSS 及其相关编译型语言 Less 和 Sass 都有很好的支持。
当然,最 nice 的还是写 js 代码了,这也是我接下来要着重介绍的功能。
目前 vsc 已经开源了:
https://github.com/i5ting/vsc
Node.js 能干什么?
当 Web Server 接收到一个 HTTP request 的时候,它会以 HTTP response 的形式相应这个请求,也就是返回一个 HTML 页面, Web Server 可以响应一个静态的 HTTP 页面,也可以转发或者代理请求到其他的服务端脚本引擎 (CGI, JSP 或者 ASP、PHP、Node.js 等等),然后返回一个动态的相应。不管以什么样的服务端技术, Web Server 大多说情况都只是以 HTML 德形式返回一个 HTTP 响应。
根据 Application Server 的定义, Application Server 是为客户端应用提供业务逻辑,它与客户端应用的交互可以通过多种协议,其中也包括 HTTP 协议, 一个 Web Server 主要是处理 HTTP 请求,发送 HTML 到浏览器,而 Application Server 为客户端应用提供了访问业务逻辑的接口。客户段应用可以像调用一个对象的方法一样调用这些业务逻辑。
apache、nginx 等 http server,主要提供静态 http 服务和反向代理
但有一个问题,如果你期望的文件要处理 header 或者其他变态请求,nginx 就没法给你处理(nginx + lua 也是可以,但比较麻烦),这是使用 Node.js 的 server 就会非常好用。
纯 http 来看,nginx 和 node 能够的功能是非常类似的,我们做的最多的是 nginx 挡在 node 前面,所以很多人都不太清楚这个点。
使用 Node.js 处理静态资源,单机过亿次是轻轻松松的。
这就是我们大部分理解的 Node.js 作用。动不动就 Express 或 Koa,连接数据库 crud 等
反向代理功能同 nginx,这里不细讲,Node.js 也有模块可以完成一样的功能,如果会 Node.js 比玩 nginx 要简单
比如淘宝基于 Node 的前后端分离
这里的 Node.js 服务
一般大型网站都会非常复杂,做个了很多版本升级、重构,那么必然会慢慢的向服务化靠拢,无论是 SOA 还是微服务,都会提供非常多的服务,而且各种协议都有,那么你的前端要怎么处理呢?
放到前端来说,肯定是不好的,所以比较合理的方式就是在服务和前端直接,增加 Node.js 作为代理。
我希望在 2017 年这个地方能够做的更好
Node.js 从 2009 横空出世之后,至今已经 7 年有余,各种 web 框架也林林总总,目前大约在 npm 上有 35 万左右包,刨去前端和一些无意义的封装,也是有非常可观的优秀的模块的。其中 web 框架也是特别抢眼的,从早期的 express 到现在 koa,对异步流程控制的改进前仆后继。随着移动端崛起面向 api 的框架 hapi 和 restify 也如火如荼,更有一些面向特性的框架,比如 thinkjs 对 es6/es7/typescript 支持,整体来说,质量都是非常不错的,算百花齐放,还是那句话,即使不优化,你也能用这些框架获得较高的性能。
很多人都争论这个问题,不同的 leader 也有不同的解决方案,那么,如何做框架选型呢?我总结了一下,大概有 3 个决定因素
无论如何,至少要有一个人能 cover 住,这是我选型的根本,框架再好,也不是给你设计的,所以难免会各有各种各样的问题,那么你就只有一个选择了
f**k = fork or fuck
要么 fork 了自己改,要么 what the fuck。。。
在 2017 年,Node.js 会往后端继续前进,如果能够把 rpc 服务组装部分做好,我觉得就非常好了。随着 React、vue、Typescript、Flow、Lerna、Webpack、Vscode 等带动,Node.js 一定会取得更辉煌的成绩!
全文完,祝福大家新年快乐~ 有问题上 cnode,有问必答,祝大家新的一年都有更好的成长和收货!
欢迎关注 Cnode 官方公众号【node 全栈】
如果想参与评论,请点击阅读原文链接,进入国内最专业的 cnode 论坛
你身边如果有朋友对 Node.js 或全栈感兴趣,可以转发给他们看看哦,O(∩_∩)O 先谢过
来源: