Google chrome vs nodejs(v8)的性能?

Posted

技术标签:

【中文标题】Google chrome vs nodejs(v8)的性能?【英文标题】:Performance of Google chrome vs nodejs (v8)? 【发布时间】:2015-06-05 22:22:33 【问题描述】:

示例

     console.time("Test");
     for(var i=0; i <2500000; i +=1 )
             // loop around
     
     console.timeEnd("Test");

上面的代码在nodejs中运行faster而不是google chrome。为什么 node.js 比谷歌浏览器更快,两者都使用chrome v8 引擎

注意

平均速度

 Google Chrome  - 1518.021ms 

 Node.js - 4 ms

知道执行速度的不同吗?

【问题讨论】:

这些性能测试你做的怎么样?你如何在 Chrome 中运行 javascript 在您的简单示例中,循环最终什么都不做,只是将变量 i 从 0 更改为几百万。 V8 引擎的 JIT 编译器会优化这样的部分,如果能得到相同的结果,甚至可能根本不运行循环。如您所见,这将取决于运行 JS 的环境。这是关于性能和基准测试的相关 JS 演讲:youtube.com/watch?v=65-RbBwZQdU 但是当我在 nodejs 和 chrome 中尝试下面的代码时,chrome 需要 522 ms 而 nodejs 需要 2277 ms。这意味着铬更快。函数 test() const startTime = new Date().getTime(); for(var i=0;i 【参考方案1】:

在网络浏览器 (Chrome) 中,在任何函数范围之外声明变量 i 会使其成为全局变量,因此会绑定到 window 对象。因此,在网络浏览器中运行此代码需要在 for 循环的每次迭代中重复解析大量填充的窗口命名空间中的属性。

然而,在 Node.js 中,声明任何函数范围之外的任何变量只会将其绑定到 module 范围(而不是窗口对象),因此更容易并且更快地解决。

当我们将上述代码包装在函数中时,我们将获得或多或少相同的执行速度。

【讨论】:

还要注意如何通过使用let i 而不是var i 获得显着的加速,这使它成为一个局部变量。【参考方案2】:

这是由于 JavaScript 中的 SCOPE

浏览器控制台无范围的代码:花费很多时间:测试:1154.19ms

以下代码将保存在大量填充的窗口对象中,这需要时间来解决;

 console.time("Test");
 for(var i=0; i <2500000; i +=1 )
         // loop around
 
 console.timeEnd("Test");

浏览器控制台代码范围:花费更少时间测试:3.06ms

以下代码将保留在 JavaScript 范围内,范围几乎是空的因此时间更短

function rocket()
    console.time("Test");
     for(var i=0; i <2500000; i +=1 )
             // loop around
     
     console.timeEnd("Test");

rocket()

Nodejs REPL 中:没有范围的代码:测试:14ms

出乎意料但是nodejs最外面的范围包含一些变量

 console.time("Test");
 for(var i=0; i <2500000; i +=1 )
         // loop around
 
 console.timeEnd("Test");

Nodejs REPL 中:代码范围:测试:2ms

以下代码将保留在 JavaScript 范围内,范围几乎是空的因此时间更短

function rocket()
    console.time("Test");
     for(var i=0; i <2500000; i +=1 )
             // loop around
     
     console.timeEnd("Test");

rocket()

结论:这都是由于JavaScript中的SCOPESCOPING是由函数完成的

表示如果你创建新函数,大括号内的place被称为SCOPE,它最初是空的,并且如果您在此范围内创建变量,则不会花费任何时间来执行

【讨论】:

【参考方案3】:

现在远没有那么戏剧化,但在您的测试中,我确实得到了 2 倍的提升,从 5.417 毫秒降低到 2 毫秒。当我使用更大的循环和函数包装时,我在 Node 和 Chrome 上的值几乎完全相同。

(function()
console.time("Test");
for(var i=0; i <10000000000; i +=1 )
     // loop around

console.timeEnd("Test");
).call(this);

【讨论】:

以上是关于Google chrome vs nodejs(v8)的性能?的主要内容,如果未能解决你的问题,请参考以下文章

json对象上的多属性检查三元运算符在nodejs中不起作用,而它在google chrome控制台中工作

Google Translate web 提供了两种不同的翻译(chrome browser vs Selenium/chromedriver)

UrlFetchApp Google Scripts VS Node Fetch

nodejs优缺点及安装步骤

无法在 TypeScript 中调试 - VS Code

Node.js介绍优势用途