Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ES6课程表现_Javascript_Performance_Object_Ecmascript 6_Benchmarking - Fatal编程技术网

Javascript ES6课程表现

Javascript ES6课程表现,javascript,performance,object,ecmascript-6,benchmarking,Javascript,Performance,Object,Ecmascript 6,Benchmarking,好的,我读过的基本内容是:ES6类只是糖语法。好的,所以我想从性能水平上检查一下。我已经创建了一个脚本,在这个脚本中,我在一个对象上迭代了n次,这个对象增加了一个内部计数器 我尝试了不同的方法,使用new语法、普通对象、对象。创建语法和。。。ES6class语法 我在node中执行了脚本,在windows上执行了v4,在linux上执行了v5和v6。每次结果都相同: 使用new或Object.create的对象速度更快 Closurish法每次服用+/-两次 ES6课程需要10倍以上的时间 现在

好的,我读过的基本内容是:ES6类只是糖语法。好的,所以我想从性能水平上检查一下。我已经创建了一个脚本,在这个脚本中,我在一个对象上迭代了n次,这个对象增加了一个内部计数器

我尝试了不同的方法,使用
new
语法、普通对象、
对象。创建
语法和。。。ES6
class
语法

我在node中执行了脚本,在windows上执行了v4,在linux上执行了v5和v6。每次结果都相同:

  • 使用new或Object.create的对象速度更快
  • Closurish法每次服用+/-两次
  • ES6课程需要10倍以上的时间

  • 现在的问题:我的测试相关吗?从语法的角度看,我做错了什么吗?或者ES6课程真的很慢

    谢谢你的帮助

    EDIT:我没有为这段代码使用任何transpiler,只是执行node myFile.js来执行测试

    编辑:这是节点6.2.2上的执行结果

    closureAlgo : 894ms
    closureFunctionAlgo : 400ms
    plainObjectAlgo : 861ms
    plainObjectCreateAlgo : 336ms
    objectAlgo : 335ms
    classAlgo : 2684ms
    
    以下是测试代码:

    “严格使用”;
    //更容易阅读这个大数字!
    常数迭代=Math.pow(10,8);
    让我;
    功能节点(cb){
    var begin=process.hrtime();
    cb();
    var diff=进程.hr时间(开始);
    console.log(参数[0].name+':'+Math.round((diff[0]*1000)+(diff[1]/1000000))+“ms”);
    }
    功能perfWeb(cb){
    var begin=performance.now();
    cb();
    var end=performance.now();
    log(Math.round((end-begin))+“ms”);
    }
    const perf=性能类型!='未定义的'?perfWeb:perfNode;
    函数closureAlgo(){
    函数计算(){
    var计数=0;
    返回{
    增量:函数(){
    计数++;
    }
    }
    }
    var calcImpl=calc();
    对于(i=0;i
    “ES6课程真的很慢”-白色的车通常比红色的车慢吗?“我想你已经回答过了,说ES6课程真的很慢”-他们没有。他们测量了现实生活中永远不会发生的事情——在一次应用程序运行中创建10^8个不同的类。因此,整个结论毫无意义。更不用说微基准标记是复杂的,需要了解js引擎如何在引擎盖下工作。基准测试是一个复杂的过程。需要考虑的参数很多。@NicolasBaptiste由于测试用例不明显,结果不明显。您正在测试不同的操作(包括声明和调用),然后在此基础上得出一些结论。就像:我买了鱼子酱和牛奶,花了50美元->牛奶太贵了。@NicolasBaptiste javascript引擎或不是普通的javascript解释器,但使用复杂的即时编译和运行时优化,因此程序运行时一个函数的性能可能会有所不同。优化器被调优为优化真实世界的代码,因此如果您在没有真实案例场景的情况下进行性能测试,那么您很可能会阻止优化器执行其工作,因此您不会得到正确/有意义的结果。