Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【译】Node 6 升级到 Node 8 :真实应用中的性能比较 #11

Open
Hugo-seth opened this issue Jun 9, 2017 · 1 comment
Open
Labels

Comments

@Hugo-seth
Copy link
Owner

Hugo-seth commented Jun 9, 2017

原文地址: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/ 目录。

上面进行的很不错,但一会我将会在 Windows 上更新它,估计它将花费 4 天的时间。

PS:我的天!Node 8 在 Windows 上安装的异常成功。没有人工的步骤,没有不兼容的库,没有不久前还需要的乱七八糟的配置

关于网站

下面比较的是一个中等偏大的 React 网站的一个页面的性能。在服务端,它将有一两千个属性的 JSON 对象传递给模板,然后返回包含 2113 个 DOM 节点的 HTML 。

(没错,是有太多的 DOM 节点了。它在手机端整整需要 2 分钟才能解析完,但我处在食物链的底层,并不能做什么改变。而且有一半的节点是隐藏的,仅仅是为了 "SEO" - 甚至让我无法开始)

··············································································································································

我们开始实验吧。

服务端渲染时间

我们从最重要的指标开始,服务器渲染页面所需的时间。

这是在我的大的银色的装有 macOS Sierra 系统的笔记本上测试的,伴随着几 GHz 的嗡嗡声。

2

刚开始的时候,并没有很大的差别,但在第八次的时候,渲染时间趋于稳定了,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 的测试模式:

3

在运行了几次之后,Node 8 平均减少了大约 31% 。上面这个图表仅仅只是提醒大家将 NODE_ENV 设置成 production 并使用库的生产环境版本是很重要的。

··············································································································································

我不是很确定 Node 8 性能的提高是怎么来的。我认为大部分来自 V8 5.8 。如果你对它怎样工作感兴趣的话,可以看这个很棒的视频

运行一套测试

这一套测试有大约 500 Jest 的测试用例,它们都仅仅是普通的 JavaScript ,大部分调用的都是插入和销毁 React 组件。

4

Node 用时少了 10% 。可能性能的改进远不止上面所表示的,因为 JavaScript 引擎并没有做任何的优化(每一个测试都是新的 Node 进程)。当然前面只是猜测,随时欢迎指正或说明。

Webpack 构建

用 Webpack 构建大约 500 KB JavaScript ,其过程中有不少的磁盘 I/O ,一连串的 Babel 编译和 JS 的压缩混淆。

5

Node 8 减少了 7% 的用时,其它并没有值得说的。

NPM 安装

现在换成 Windows - 最广泛使用 NPM 的操作系统 。

package.json 里有 40 个包;依赖树加起来有 445 个包。

下面第一次测试时,我删除了 npm 缓存和项目目录的 node_modules 文件夹,这样测试时就是从网络上拉取依赖包。

有意思的是 NPM 3 的最快速度是 7 Mbps,而 NPM 5 则达到了 20 Mbps 。

为了增加点乐趣,我还加入了 yarn 作对比。

6

另外对下面这句话的作者说一句:

8

你让我轻笑了起来。但就像 Marcel Marceau 曾经说过,这是一个紧张的笑声,因为我并不知道我在做什么。

··············································································································································

接下来,我在每次运行 npm install 前都先删除 node_modules 文件夹但保留 npm 缓存。我认为这大部分都是磁盘 I/O (从 缓存 复制到项目目录),但很显然不止是复制,因为用时的巨大改善表明了这点。

7

在上面两种情况下,NPM 5 都减少了三分之一的安装用时。并且 Yarn 都显著地更快(在我的需求下不值得切换到 Yarn,但别人就不一定了)。

··············································································································································

朋友们,上面就是我测试的全部图表了。

实话实说,我一开始只是期待 Node 8 可能有几个百分点的性能改进,如果不是在真实项目中测试了,我也不会如此的震惊。能够减少四分之一的服务端渲染时间和三分之一的 NPM 安装用时真的太棒了。

你们做的太棒了,所有的 Node 的贡献者,你们做的真的太棒了。

··············································································································································

当然,Node 8 还有很多新特性。

@Hugo-seth Hugo-seth changed the title [译]Node 6 升级到 Node 8 :真实应用中的性能比较 【译】Node 6 升级到 Node 8 :真实应用中的性能比较 Sep 14, 2017
@henryxie2093
Copy link

想知道服务端渲染页面的时间是用什么记录的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants