Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/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简单循环与…性能对比_Javascript_For Loop_Ecmascript 6_For Of Loop - Fatal编程技术网

Javascript简单循环与…性能对比

Javascript简单循环与…性能对比,javascript,for-loop,ecmascript-6,for-of-loop,Javascript,For Loop,Ecmascript 6,For Of Loop,我已经看到,自ECMA 6以来,我们可以使用以下方法代替传统的for循环: for( let i = 0 ; i < arr.length ; i++ ) { var elm = arr[i]; // do stuff } 你看到了吗?第二个更可读、更简单、更易于维护 我只是想知道第二种语法的性能如何,因为我需要在游戏的渲染循环中大量使用它(每秒60次) 你有什么线索吗?第一个(循环的标准)性能要好得多。新的语言功能一开始往往表现得不好,因为它们没有得到足够的优化关注 使

我已经看到,自ECMA 6以来,我们可以使用以下方法代替传统的for循环:

for( let i = 0 ; i < arr.length ; i++ ) {
    var elm = arr[i];
    // do stuff
}
你看到了吗?第二个更可读、更简单、更易于维护

我只是想知道第二种语法的性能如何,因为我需要在游戏的渲染循环中大量使用它(每秒60次)


你有什么线索吗?

第一个(循环的标准)性能要好得多。

新的语言功能一开始往往表现得不好,因为它们没有得到足够的优化关注


使用它们的人越多,他们就越有可能受到关注,因此总体而言,除非您遇到性能至关重要的极端情况,否则请使用提供更好、更清晰代码的代码。

一般来说,
for..of
将比
for(;;)
慢,循环数组。因为它处理迭代器/生成器,与递增变量并将其与其他值进行比较相比,这涉及一些开销

但是,正如你所看到的,这是一个很大的但是

  • 不要过早地优化代码。编写代码,检查实际的瓶颈所在,并开始优化这些瓶颈

  • 由于代码优化,微基准毫无用处。他们测试实际测试本身的性能;不是你想用的技术。在实际生产代码中应用这些技术时,性能可能会在任何方向上发生多个数量级的变化。这实际上意味着每一次发生。在一个地方,
    for(;;)
    循环可能更快,在另一个地方,
    for..of
    可能更好

  • 在AS3期间,我了解到函数调用是昂贵的,优化代码的关键是内联。在JS中,我经常看到
    Array#forEach
    在JS可以优化在数组上执行的函数的sh*t时,会运行手动循环+可以确定它可以消除所有安全特性(必须在后台执行),因为此代码不会用稀疏数组调用,或者以某种方式访问该数组上未定义的键

    摘要:

    除非您在实际上下文中调试实际代码,否则您不知道如何实际优化它;你只能估计或猜测


    在JS中,内部优化器是实现真正快速代码的关键。不是对代码进行一些微优化。

    您还可以包括此变体,以完全涵盖性能指标
    var i;对于(i=0;i<5;i++){}
    来说,问题在于脚本的性能取决于解释器,即浏览器和平台。这很容易检查,在提问之前您是否尝试过自己进行性能测试?我没有,但我认为这对社区来说是一个好问题,因为我在这个主题上没有看到任何东西。。。。(我本可以通过测试来回答我自己的问题,但我想为其他人和讨论腾出空间:)),而对于目前的Chrome来说,更容易阅读的是4%slower@Swift你说得对。我用一个更好的测试取代了它。@SébastienGarcia Roméo修复了…当它至关重要时,你必须在特定的目标平台上用真实的数据对特定的代码进行基准测试,而不是依赖于一般的过早优化规则。非常正确@Bergi.:-)
    for( let elm of arr ) {
        // do stuff
    }