AS3: что быстрее, цикл for или функция массива forEach ()? - PullRequest
0 голосов
/ 04 октября 2011

Мне интересно, что быстрее в AS3:

array.forEach( function(v:Object, ...args):void
{ ... } );

Или

var l:int = array.length;
for ( var i:int = 0; i < l; i++ ) { ... }

Ответы [ 4 ]

6 голосов
/ 04 октября 2011

для i:)

var array:Array = [];
for (var i:int=0; i < 100000; i++)
{
    array[i] = i;
}
var time:uint = getTimer();
array.forEach( function(v:Object, ...args):void
                { v = 1; } );
trace(getTimer()-time); //trace 85


time = getTimer();
var l:int = array.length;
for ( i = 0; i < l; i++ ) { array[i] = 0; }
trace(getTimer()-time); //trace 3
3 голосов
/ 15 ноября 2011

Приведенные выше ответы не учитывают, что вы в основном будете выполнять операции с элементами массива в цикле

Этот код

import flash.utils.getTimer;

var a:Array=[];
var time:int=0;

for(var i:int=0; i<10000; i++) {
    a.push(new Date());
}

time=getTimer();
for(var j:int=0; j<a.length; j++) {
    var dt:Date=a[j];
    dt.valueOf();
}
trace("for: " , getTimer()-time);

time=getTimer();
for each(var xt:Date in a) {
    xt.valueOf();
}
trace("for each: " , getTimer()-time);

time=getTimer();
a.forEach(nothing);
trace("a.forEach: " , getTimer()-time);

function nothing(d:Date, ...args):void {
    d.valueOf();
}

Возвращает следующее:

for:  3
for each:  2
a.forEach:  13

Для 100000 значений результаты еще более впечатляющие

for:  27
for each:  17
a.forEach:  138

Общий победитель: для каждого цикла

for each(var d:myClass in myCollection) {
    //myCode
}
1 голос
/ 30 марта 2014
        var time:uint;
        var vec:Vector.<Number> = new Vector.<Number>;
        for (var b:int=0; b < 1000000; b++)
        {
            vec[b] = 99;
        }

        ///

        time = getTimer();
        for (var i:int = 0; i < vec.length; i++ )
        {
            vec[i] = 2;
        }
        trace('for i: '+(getTimer()-time)+'ms');

        ///

        time = getTimer();          
        for (var j:int = vec.length - 1; j >= 0; --j) 
        {
            vec[j] = 3;
        }
        trace('for i rev: '+(getTimer()-time)+'ms');            

        ///

        time = getTimer();
        for ( var k:int in vec)
        {
            vec[k] = 4;
        }
        trace('for: '+(getTimer()-time)+'ms');          

        ///

        time = getTimer();
        for each(var o:Number in vec)
        {
            o = 5;
        }
        trace('for each: '+(getTimer()-time)+'ms');         

        ///

        time = getTimer();
        vec.forEach( function(v:int, ...args):void
        {
            v = 6;
        }
        );
        trace('forEach: '+(getTimer()-time)+'ms');  

// for i: 81ms
// for i rev: 79ms
// for: 28ms
// for each: 33ms
// forEach: 530ms
1 голос
/ 04 октября 2011

Для VS Foreach по производительности массива (в AS3 / Flex)

надеюсь, что это поможет вам понять разницу между циклами for и for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...