AS3在分裂和拼接(0,1)之间的性能差距?

时间:2013-12-12 01:00:21

标签: performance actionscript

我在as3中创建了mergeSort算法。为了删除数组中的第一个元素,我使用了Array.splice(0,1)。然后我想起了Array.split()。我比较了两者。
事实证明,split()比splice(0,1)快得多。
对具有10个元件的阵列进行30k测试
拼接(0,1):平均5567毫秒 分裂:平均1956毫秒,快2.8倍

对于较小的阵列,性能差距也较小。

阵列上有30k测试,有2个元素
splice(0,1):平均330 ms
split():平均206毫秒,快1.6倍

有人可以向我解释一下吗?这与索引有关吗?
感谢。

代码:

public static function sort(a:Array):Array{
    if(a.length == 1){
        return a;
    }

    var b = a.splice(a.length / 2, a.length);
    a = sort(a);
    b = sort(b)
    var r = new Array;

    while(a.length && b.length){
        if(a[0] < b[0]){
            r.push(a.shift());
        }else{
            r.push(b.shift());
        }
    }

    while(a.length)
        r.push(a.shift());

    while(b.length)
        r.push(b.shift());

    return r            
}

1 个答案:

答案 0 :(得分:1)

假设Carlo Cannas是正确的并且你比较了拼接和切片(不是分割),你得到的结果是预期的,因为splice修改了一个现有的数组,这通常比创建两个新数组更昂贵,就像切片一样。