Open Hugo-seth opened 7 years ago
原文地址:Upgrading from Node 6 to Node 8: a real-world performance comparison 原文作者:David Gilbertson
原文地址:Upgrading from Node 6 to Node 8: a real-world performance comparison
原文作者:David Gilbertson
Node 8 已经发布了,你听说了没?他们说新版本的速度更快了。
但是没有任何数字的话,更快仅仅只是几个字。
好在我有一个很大的 React 网站运行在 Node 6 上,并且有 2 个小时的空闲。
更新到 Node 8 足够简单 - 只需要十分钟,没有任何的不兼容库。我从这里下载了 macOS 系统的 .pkg 文件,并且安装的很顺利。虽然我需要手动的去删除 usr/local/lib/node_modules/ 目录。
usr/local/lib/node_modules/
上面进行的很不错,但一会我将会在 Windows 上更新它,估计它将花费 4 天的时间。
PS:我的天!Node 8 在 Windows 上安装的异常成功。没有人工的步骤,没有不兼容的库,没有不久前还需要的乱七八糟的配置。
下面比较的是一个中等偏大的 React 网站的一个页面的性能。在服务端,它将有一两千个属性的 JSON 对象传递给模板,然后返回包含 2113 个 DOM 节点的 HTML 。
(没错,是有太多的 DOM 节点了。它在手机端整整需要 2 分钟才能解析完,但我处在食物链的底层,并不能做什么改变。而且有一半的节点是隐藏的,仅仅是为了 "SEO" - 甚至让我无法开始)
··············································································································································
我们开始实验吧。
我们从最重要的指标开始,服务器渲染页面所需的时间。
这是在我的大的银色的装有 macOS Sierra 系统的笔记本上测试的,伴随着几 GHz 的嗡嗡声。
刚开始的时候,并没有很大的差别,但在第八次的时候,渲染时间趋于稳定了,Node 6 花费了大约 104 ms 完成渲染,而 Node 8 只花了大约 80 ms 。
Node 使渲染时间减少了相当不错的 23 % 。或更具体的说,服务这个网站所需的硬件减少了 23% 。
我将建议我的老板升级到 Node 8 ,并将亚马逊云服务实例从 25 减少到 20 ,然后把第一个月节省的钱捐给 Node.js 基金。
因为我喜欢笑声。(这句话有点迷,原话:Because I enjoy the sound of laughter )
下面的是同样的测试,但是跑在 React 的测试模式:
在运行了几次之后,Node 8 平均减少了大约 31% 。上面这个图表仅仅只是提醒大家将 NODE_ENV 设置成 production 并使用库的生产环境版本是很重要的。
production
我不是很确定 Node 8 性能的提高是怎么来的。我认为大部分来自 V8 5.8 。如果你对它怎样工作感兴趣的话,可以看这个很棒的视频。
这一套测试有大约 500 Jest 的测试用例,它们都仅仅是普通的 JavaScript ,大部分调用的都是插入和销毁 React 组件。
Node 用时少了 10% 。可能性能的改进远不止上面所表示的,因为 JavaScript 引擎并没有做任何的优化(每一个测试都是新的 Node 进程)。当然前面只是猜测,随时欢迎指正或说明。
用 Webpack 构建大约 500 KB JavaScript ,其过程中有不少的磁盘 I/O ,一连串的 Babel 编译和 JS 的压缩混淆。
Node 8 减少了 7% 的用时,其它并没有值得说的。
现在换成 Windows - 最广泛使用 NPM 的操作系统 。
package.json 里有 40 个包;依赖树加起来有 445 个包。
下面第一次测试时,我删除了 npm 缓存和项目目录的 node_modules 文件夹,这样测试时就是从网络上拉取依赖包。
node_modules
有意思的是 NPM 3 的最快速度是 7 Mbps,而 NPM 5 则达到了 20 Mbps 。
为了增加点乐趣,我还加入了 yarn 作对比。
另外对下面这句话的作者说一句:
你让我轻笑了起来。但就像 Marcel Marceau 曾经说过,这是一个紧张的笑声,因为我并不知道我在做什么。
接下来,我在每次运行 npm install 前都先删除 node_modules 文件夹但保留 npm 缓存。我认为这大部分都是磁盘 I/O (从 缓存 复制到项目目录),但很显然不止是复制,因为用时的巨大改善表明了这点。
npm install
在上面两种情况下,NPM 5 都减少了三分之一的安装用时。并且 Yarn 都显著地更快(在我的需求下不值得切换到 Yarn,但别人就不一定了)。
朋友们,上面就是我测试的全部图表了。
实话实说,我一开始只是期待 Node 8 可能有几个百分点的性能改进,如果不是在真实项目中测试了,我也不会如此的震惊。能够减少四分之一的服务端渲染时间和三分之一的 NPM 安装用时真的太棒了。
你们做的太棒了,所有的 Node 的贡献者,你们做的真的太棒了。
当然,Node 8 还有很多新特性。
想知道服务端渲染页面的时间是用什么记录的
Node 8 已经发布了,你听说了没?他们说新版本的速度更快了。
但是没有任何数字的话,更快仅仅只是几个字。
好在我有一个很大的 React 网站运行在 Node 6 上,并且有 2 个小时的空闲。
更新到 Node 8 足够简单 - 只需要十分钟,没有任何的不兼容库。我从这里下载了 macOS 系统的 .pkg 文件,并且安装的很顺利。虽然我需要手动的去删除
usr/local/lib/node_modules/
目录。上面进行的很不错,但一会我将会在 Windows 上更新它,估计它将花费 4 天的时间。
PS:我的天!Node 8 在 Windows 上安装的异常成功。没有人工的步骤,没有不兼容的库,没有不久前还需要的乱七八糟的配置。
关于网站
下面比较的是一个中等偏大的 React 网站的一个页面的性能。在服务端,它将有一两千个属性的 JSON 对象传递给模板,然后返回包含 2113 个 DOM 节点的 HTML 。
(没错,是有太多的 DOM 节点了。它在手机端整整需要 2 分钟才能解析完,但我处在食物链的底层,并不能做什么改变。而且有一半的节点是隐藏的,仅仅是为了 "SEO" - 甚至让我无法开始)
··············································································································································
我们开始实验吧。
服务端渲染时间
我们从最重要的指标开始,服务器渲染页面所需的时间。
这是在我的大的银色的装有 macOS Sierra 系统的笔记本上测试的,伴随着几 GHz 的嗡嗡声。
刚开始的时候,并没有很大的差别,但在第八次的时候,渲染时间趋于稳定了,Node 6 花费了大约 104 ms 完成渲染,而 Node 8 只花了大约 80 ms 。
Node 使渲染时间减少了相当不错的 23 % 。或更具体的说,服务这个网站所需的硬件减少了 23% 。
我将建议我的老板升级到 Node 8 ,并将亚马逊云服务实例从 25 减少到 20 ,然后把第一个月节省的钱捐给 Node.js 基金。
因为我喜欢笑声。(这句话有点迷,原话:Because I enjoy the sound of laughter )
··············································································································································
下面的是同样的测试,但是跑在 React 的测试模式:
在运行了几次之后,Node 8 平均减少了大约 31% 。上面这个图表仅仅只是提醒大家将 NODE_ENV 设置成
production
并使用库的生产环境版本是很重要的。··············································································································································
我不是很确定 Node 8 性能的提高是怎么来的。我认为大部分来自 V8 5.8 。如果你对它怎样工作感兴趣的话,可以看这个很棒的视频。
运行一套测试
这一套测试有大约 500 Jest 的测试用例,它们都仅仅是普通的 JavaScript ,大部分调用的都是插入和销毁 React 组件。
Node 用时少了 10% 。可能性能的改进远不止上面所表示的,因为 JavaScript 引擎并没有做任何的优化(每一个测试都是新的 Node 进程)。当然前面只是猜测,随时欢迎指正或说明。
Webpack 构建
用 Webpack 构建大约 500 KB JavaScript ,其过程中有不少的磁盘 I/O ,一连串的 Babel 编译和 JS 的压缩混淆。
Node 8 减少了 7% 的用时,其它并没有值得说的。
NPM 安装
现在换成 Windows - 最广泛使用 NPM 的操作系统 。
package.json 里有 40 个包;依赖树加起来有 445 个包。
下面第一次测试时,我删除了 npm 缓存和项目目录的
node_modules
文件夹,这样测试时就是从网络上拉取依赖包。有意思的是 NPM 3 的最快速度是 7 Mbps,而 NPM 5 则达到了 20 Mbps 。
为了增加点乐趣,我还加入了 yarn 作对比。
另外对下面这句话的作者说一句:
你让我轻笑了起来。但就像 Marcel Marceau 曾经说过,这是一个紧张的笑声,因为我并不知道我在做什么。
··············································································································································
接下来,我在每次运行
npm install
前都先删除node_modules
文件夹但保留 npm 缓存。我认为这大部分都是磁盘 I/O (从 缓存 复制到项目目录),但很显然不止是复制,因为用时的巨大改善表明了这点。在上面两种情况下,NPM 5 都减少了三分之一的安装用时。并且 Yarn 都显著地更快(在我的需求下不值得切换到 Yarn,但别人就不一定了)。
··············································································································································
朋友们,上面就是我测试的全部图表了。
实话实说,我一开始只是期待 Node 8 可能有几个百分点的性能改进,如果不是在真实项目中测试了,我也不会如此的震惊。能够减少四分之一的服务端渲染时间和三分之一的 NPM 安装用时真的太棒了。
你们做的太棒了,所有的 Node 的贡献者,你们做的真的太棒了。
··············································································································································
当然,Node 8 还有很多新特性。