Node.js 9.0.0 发布

【首发于个人我的博客:tonghuashuo.github.io/blog/nodejs…html

Node.js 发布计划

Node.js 从 5.0 开始一直遵循着半年一个大版本的发布周期,每一年 4 月左右发布一个主版本号为偶数的 LTS(Long-Term-Support)版本,每一年 10 月左右发布一个主版本号为奇数的非 LTS 版本。前端

新版本发布后的半年内被称为“当前版本”,起初可能会遇到较多的向下兼容问题,早期升级的开发者可能会受到短时间的“生长痛”影响,通过若干小版本的更新后会逐渐趋于稳定。node

每一年 10 月的奇数版本发布后,同年 4 月发布的偶数版本进入 LTS 阶段,为期一年半。期间除非 Release 工做组赞成,再也不添加新特性,只对现有功能进行完善,变动内容仅限于:git

  1. 修复 Bug
  2. 安全性升级
  3. npm 升级(主版本号不变)
  4. 相关文档的更新
  5. 性能优化(基本不会影响已有的应用程序)
  6. 会引入大量繁琐恶心的代码(对已有应用程序的影响很低),可是对将来作向下兼容补丁有利的变动

最后还有 1 年时间的维护期,期间除非是很是严重的 Bug 或安全性问题,再也不有改动,对文档的修改也须要受权才能够。LTS 版本的生命周期共计 3 年,以后再也不维护。github

奇数版本一般会相对激进地引入一些新的语法和特性,变化也会比较快,主要用于对一些新特性的试错和测试,稳定性并不是追求的第一目标(毕竟只活半年)。因为变化较快,风险很是不可控,不推荐在生产环境使用奇数版本的 Node.js,想尝鲜的开发者们,请务必作好足够的思想准备,迎接不稳定的功能变动,并肯定本身有足够能力应对升级引起的各类问题(已有代码、开发环境和工具受升级影响没法正常使用等)。建议先在我的设备上有了必定实践,踩掉一些坑,感受本身能 hold 住了,再考虑迁移到公司设备上。npm

偶数版本主要考虑用于生产环境,稳定性的优先级会比较高,但并不排除引入断层升级的可能性(例如 Node.js 8.0 升级更新了 npm 到 5.0,新版 npm 对用老版本安装的依赖没有作好相应的处理,致使大量从 4.x 升级过来的用户直接无法干活了,只能经过全新安装依赖来解决。官方 Github 上有人维护了一长串的 Known Issue,其中影响较大的几个问题至今没能获得解决,可能官方也不打算管了)。升级建议:安全

  • 新版本刚发布先别急更新到生产环境,找测试设备踩一遍坑先
  • 多关注官方 Github 上的 Issue
  • 持续关注最新动态,由于最多 3 年时间,老版本就退休了,升级是迟早的

Node.js 9.0.0 的主要变化

本次升级并无太多使人兴奋的点,官方并不但愿大版本的更新致使严重的断层,所以新特性、语法会在次版本更新中逐渐被加入。主要变化以下:性能优化

  • 一个主要的依赖迎来了更新,V8 引擎更新到了 6.2,异步 IO 库 libuv 更新到 1.15.0,DNS 库 c-ares 更新到 1.13.0
  • N-API 和 HTTP2 能够直接用了,不须要再加 flag。新版本引入了 Async Hook,尽管依然属于实验性功能,但这次升级后就已经可使用了
  • Node.js 核心库开始逐渐迁移到一个全新的报错系统,为每一种错误类型提供惟一的错误代码,以此在不破坏已有代码的前提下,提升用户代码的健壮性
  • 当接收到的请求没法被正确解析时,HTTP 模块会返回一个 400 错误。此前 Node.js 会直接将 socket 挂起,致使服务器误觉得 node 进程挂了
  • assert 模块能够抛出任意类型的错误,而再也不仅限于断言错误
  • Node.js 使用 32 位带符号整数来表示计时器延迟,当延迟溢出时,新版本会增长 1 毫秒延迟,以往版本对此没有处理
  • API 文档和测试套件的更新,JS 和 C++ 的测试覆盖率均达到 90% 以上

Node.js 9.0.0 发布以后

按照官方的发布计划,9.0 的发布,意味着 8.x 进入 LTS 阶段,7.x 完全退出舞台,6.x 的 LTS 还有半年结束。也就是说,差很少是时候考虑往生产环境部署 Node.js 8.x 了。服务器

番外

或许是由于大部分人都是实用主义者,你们内心都很清楚,奇数版本就是用来试错的,只有偶数版本才会被用于生产环境,所以大部分人都会关注“有用”的偶数版本,而忽略“与我无关”的奇数版本。从搜索引擎对“node 7”和“node 8”的收录状况来看,关于 node 7 的讨论很是少,除了一些主流媒体报道了一些版本发布的消息,基本搜不到什么有价值的内容,而关于 node 8 的讨论就明显要多一些。异步

倒不是想说这有什么不对,每一个人的精力都有限,实用主义没什么很差。做为一名大前端技术的爱好者,同时也是一名职业的开发者,我我的是比较乐于去了解和尝试新技术的,即使它最后并没可以成为主流,但只有亲自尝试了,才有发言权说这东西究竟如何。也只有亲自参与其中,才能真正领略到开源世界众多开发者们的智慧,思考的过程才是真正学到东西的过程。

但愿本文可以为“或许注定要被忽略”的 Node.js 9.x 多少贡献一点点的关注度吧。

相关文章
相关标签/搜索