Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all articles
Browse latest Browse all 14821

数组下标获取a[1]真的比对象属性获取b['a1']快吗?附测试结果

$
0
0

最近看到一篇文章如下:

JavaScript获取数据的性能有如下顺序(从快到慢):变量获取 > 数组下标获取(对象的整数索引获取) > 对象属性获取(对象非整数索引获取)。我们可以通过最快的方式代替最慢的方式:

var body = document.body;
var maxLength = someArray.length;
//...

需要考虑,作用域链和原型链中的对象索引。如果作用域链和原型链较长,也需要对所需要的变量继续缓存,否则沿着作用域链和原型链向上查找时也会额外消耗时间。

测试代码如下:

var arr = [];
var obj = {};
for (let i = 0; i < 100000; i ++) {
        arr[+i] = + i;
        obj['a' + i] = + i;
}

console.time('arr');
console.log(arr[10000]);
console.timeEnd('arr');
console.time('obj');
console.log(obj['a10000']);
console.timeEnd('obj');

chrome环境

// 测试结果1
10000
arr: 0.484ms
10000
obj: 0.248ms
// 测试结果2
10000
arr: 0.242ms
10000
obj: 0.105ms
// 测试结果3
10000
arr: 0.272ms
10000
obj: 0.168ms
```bash
node环境 v7.6
```bash
// 测试结果1
10000
arr: 2.123ms
10000
obj: 0.098ms
// 测试结果2
10000
arr: 2.024ms
10000
obj: 0.096ms
// 测试结果3
10000
arr: 1.939ms
10000
obj: 0.097ms
```bash
不管在node环境还是chrome环境下,都是对象属性获取较快,是我的测试方式有问题么?

Viewing all articles
Browse latest Browse all 14821

Trending Articles