Google Chrome与nodejs(v8)的表现如何?

kar*_*ick 10 javascript google-chrome node.js

在此输入图像描述

     console.time("Test");
     for(var i=0; i <2500000; i +=1 ){
             // loop around
     }
     console.timeEnd("Test");
Run Code Online (Sandbox Code Playgroud)

上面的代码运行fasternodejsgoogle chrome.为什么node.js比谷歌Chrome更快都使用chrome v8引擎

注意

平均速度

 Google Chrome  - 1518.021ms 

 Node.js - 4 ms
Run Code Online (Sandbox Code Playgroud)

关于差异执行速度的任何想法?

kar*_*ick 21

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

但是,在Node.js中,声明任何函数范围之外的任何变量只会将其绑定到模块范围(而不是窗口对象),因此可以更容易,更快地解析.

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

  • 另请注意如何通过使用“let i”而不是“var i”来显着提高速度,这使其成为局部变量。 (2认同)

vij*_*jay 6

这是由于JavaScript 中的SCOPE

在没有范围的浏览器控制台代码中:花费大量时间: 测试:1154.19ms

下面的代码将保存在人口稠密的窗口对象中,这将需要时间来解析;

 console.time("Test");
 for(var i=0; i <2500000; i +=1 ){
         // loop around
 }
 console.timeEnd("Test");
Run Code Online (Sandbox Code Playgroud)

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

下面的代码将保留在 JavaScript 范围内,并且范围几乎为空 ,因此时间更少

function rocket(){
    console.time("Test");
     for(var i=0; i <2500000; i +=1 ){
             // loop around
     }
     console.timeEnd("Test");
}
rocket()
Run Code Online (Sandbox Code Playgroud)

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

意外的是,nodejs最外部的作用域包含一些变量

 console.time("Test");
 for(var i=0; i <2500000; i +=1 ){
         // loop around
 }
 console.timeEnd("Test");
Run Code Online (Sandbox Code Playgroud)

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

下面的代码将保留在 JavaScript 范围内,并且范围几乎为空 ,因此时间更少

function rocket(){
    console.time("Test");
     for(var i=0; i <2500000; i +=1 ){
             // loop around
     }
     console.timeEnd("Test");
}
rocket()
Run Code Online (Sandbox Code Playgroud)

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

意味着如果你创建新函数,大括号 {}内的位置被称为SCOPE,它最初是空的,如果你在这个范围内创建变量,它将不需要时间来执行