typedArray 与 array 的读取与插入速度问题
发布于 5 年前 作者 Helovebai 2730 次浏览 来自 问答
  1. array在js中的实现是用哈希映射,其读取与插入效率都比较慢,于是出现了typedArray,开辟一整块连续的内存供开发者使用。
  2. 上述代码为测试结果,在node 8.10.1 上跑的结果第1,2,4 个代码块都正常,(1,2,4 分别为相同数据类型的读取,相同数据类型的插入,不同数据类型的插入)array比typedArray慢。但是第三个代码块(第三个代码块为不同类型的读取)就差距不是很多了,甚至typedArray比array还要慢一些。
  3. 下面为测试代码:
{
    // 相同类型数组的读取
    const arrLength = 50000000;
    const arr = new Array(arrLength);
    arr.fill(123);
    let value_1;
    console.time('array');
    for(let i = 0; i < arr.length; i++) {
        value_1 = arr[i];
    }
    console.timeEnd('array'); 
    // arrayBuffer的读取
    const arrBuffer = new ArrayBuffer(4 * arrLength);
    const int32Arr = new Int32Array(arrBuffer); 
    int32Arr.fill(123);
    let value_2;
    console.time('int32Arr');
    for (let i = 0 ; i < int32Arr.length; i++) {
        value_2 = int32Arr[i];
    }
    console.timeEnd('int32Arr');
}

{
    // 相同类型数组的插入
    const arrLength = 50000000;
    const arr = new Array(arrLength);
    console.time('array');
    for(let i = 0 ; i < arr.length; i++) {
        arr[i] = i;
    }
    console.timeEnd('array'); 
    // arrayBuffer的插入
    const arrBuffer = new ArrayBuffer(4 * arrLength);
    const int32Arr = new Int32Array(arrBuffer); 
    console.time('int32Arr');
    for (let i= 0 ; i < int32Arr.length; i++) {
        int32Arr[i] = i;
    }
    console.timeEnd('int32Arr'); 
}


{
    // 不同数据类型的读取
    const arrLength = 50000000;
    const arr = new Array(arrLength);
    arr.fill(123);
    arr[0] = '234';
    let value_1;
    console.time('array');
    for(let i = 0 ; i < arr.length; i++) {
        value_1 = arr[i];
    }
    console.timeEnd('array'); 
    // arrayBuffer的读取
    const arrBuffer = new ArrayBuffer(4 * arrLength);
    const int32Arr = new Int32Array(arrBuffer); 
    int32Arr.fill(123);
    int32Arr[0] = '234';
    let value_2;
    console.time('int32Arr');
    for (let i = 0; i < int32Arr.length; i++) {
        value_2 = int32Arr[i];
    }
    console.timeEnd('int32Arr');
    // 不同类型的情况下,arrayBuffer 的插入速度与array差不多
}

{
    // 不同类型的插入
    const arrLength = 50000000;
    const arr = new Array(arrLength);
    arr[0] = '234';
    console.time('array');
    for(let i = 1 ; i < arr.length; i++) {
        arr[i] = i;
    }
    console.timeEnd('array'); 
    // arrayBuffer的插入
    const arrBuffer = new ArrayBuffer(4 * arrLength);
    const int32Arr = new Int32Array(arrBuffer); 
    int32Arr[0] = '234';
    console.time('int32Arr');
    for (let i= 1 ; i < int32Arr.length; i++) {
        int32Arr[i] = i;
    }
    console.timeEnd('int32Arr'); 
    // 不同类型的情况下, arrayBuffer 的插入速度比array快,但是第一项数据丢失,(因为声明的是int类型的)存储的为0;
}
  1. 以下是运行结果贴图: dest.png 希望有了解的大神给我解答一下心中的疑惑… 不胜感激…
    路漫漫…
2 回复

自己顶自己一下~ 希望来个大佬解答一下小生心中的困惑…

我再顶一下,来个大佬回复一下呗 …

回到顶部