如何评价 Node v6.0.0 (Current) ?

关注者
321
被浏览
15291

9 个回答

首先出 6.0 我们肯定是支持的。

最主要的是 v8 的升级。因为 node.js 在一个大版本里是基本不升级 v8 的,所以这次一升级,大家就突然感觉,擦咋 es2015 支持度一下子大跃进了?其实跟 Chrome 的发版节奏比,只是跟上了而已。

当然,es2015 支持度的提升是很好的,剩下还未支持的部分,要么是小问题(如 function names 的一些特例),要么是还没什么人用的特性(如 Symbol.species),要么是可能在后续标准里被改掉的(如 tail calls),基本不碍事。

有人说还不支持 import/export 啊!所以结果还是要 babel。但实际上如果只需要处理 import/export ,你可以用 rollup 等轻量级方案。

不过有个坑爹的事情是,es2015特性虽然支持度非常高,但是性能优化还没有跟上,比如略复杂一点的 let 就会让函数无法被 optimize,而函数无法优化对性能影响巨大,简单循环可以差10倍效率。这一点上,V8 做得比 Chakra(MS Edge 的 JS 引擎)差多了。Chakra 现在连 try-catch 也不会阻止函数优化了。

所以绕了一圈回来,如果你对性能要求很高,还是要用 babel 做一些编译的。


再有,每次升级大版本,总是会有一堆 breaking changes。大多数情况下,你不太会遇到问题。但是一旦遇到就比较麻烦了。

这次甚至还有比较严重的问题,比如 Don't resolve symlinks when requiring · Issue #3402 · nodejs/node · GitHub (从我的第一个 comment 开始看即可)。我已经提请 revert 掉相关的 PR 了。(update:终于决定revert了:Revert "module: preserve symlinks when requiring" by saper · Pull Request #6536 · nodejs/node · GitHub


所以么,第一个吃螃蟹的总是需要勇气的。如果是关键服务,建议还是等几个月进入 LTS 为好。(即使如此,跟其他平台动不动等3、5年才升级已经是胆大包天了。)
今天在微博看到好多人在转发node6.0,本来觉得没什么,不就是版本更新嘛。出于好奇我运行了一下 node -v,发现我用的版本是0.12,当时我就震惊了。
为什么?