gpt4 book ai didi

javascript - JS 对象数组与 JS 对象数组效率和性能

转载 作者:行者123 更新时间:2023-11-30 06:51:12 25 4
gpt4 key购买 nike

这个问题是关于 javascript 语言的。简单地认为我们有一张 map ,我们按以下方式插入项目

var dataMap=new Map();

//First Mechanism
//firstly we can think of structure of values of map can be JSONArray of objects
dataMap.set("key1",[{'id':12,'name':"obj1"}]); // init
// and,then insert new element to JSON Array which holds by map using 'key1'
dataMap.get("key1").push({'id':23,'name':"obj47"});//updated, now value of 'key1' is an JSON array which holds two elements
// expect 'key1' -> [{'id':12,'name':"obj1"},{'id':23,'name':"obj47"}]

//Second mechanism
// next we cant think of structure of values of map as JSONObject of Arrays
dataMap.set("key1",{'id':[12],'name':["obj1"]}); // init
// then we proceed with update operations like this
dataMap.get("key1").id.push(23);
dataMap.get("key1").name.push("obj47"); // two operations to insert items to respective arrays.
// expect 'key1' ->{'id':[12,23],'name':["obj1","obj47"]}

哪种方法最有效且效率最高?

认为我们对 ma​​p 有相当多的插入操作,如果我们关注性能,哪个更好?

(如果我做错了请更正,我想尽可能简化问题,这就是原因)谢谢。

最佳答案

出于好奇,我继续使用 console.time() 来对结果进行基准测试。

Starts a timer you can use to track how long an operation takes. You give each timer a unique name, and may have up to 10,000 timers running on a given page. When you call console.timeEnd() with the same name, the browser will output the time, in milliseconds, that elapsed since the timer was started.

现在您可以争论其结果的可靠性,因为还涉及其他因素,例如浏览器缓存等。

这些是我机器上 1000000 操作的结果*。

Chrome Version 61.0.3163.91 (Official Build) (64-bit)

// 1st run
default: 2217.048095703125ms
default: 3032.159912109375ms
// 2nd run
default: 1948.16796875ms
default: 3320.7431640625ms
// 3rd run
default: 2177.461181640625ms
default: 2989.448974609375ms


Firefox 55.0.3 (32-bit)

// 1st run
default: 2146.64ms
default: 2390.11ms
// 2nd run
default: 1863.7ms
default: 2264.02ms
// 3rd run
default: 1751.7ms
default: 2283.6ms

您可以看到差异并没有那么大,应该不会成为影响您决定的因素。正如@Nina Scholz 非常正确地提到的那样,选择可以让您的生活更轻松的数据结构。

[*] 基准测试中使用的代码作为引用:

let dataMap = new Map();
const diff = 1000000;
let key = null;

console.time();
for(let i = 0; i < 1000000; i++){
key = `key${i}`;
dataMap.set(key, [{'id': i, 'name': `obj${i}`}]);
dataMap.get(key).push({'id': i + diff, 'name': `obj${i + diff}`})
}
console.timeEnd();

dataMap = new Map();

console.time();
for(let i = 0; i < 1000000; i++){
key = `key${i}`;
dataMap.set(key, {'id':[i], 'name': [`obj${i}`]});
dataMap.get(key).id.push(i + diff);
dataMap.get(key).name.push(`obj${i + diff}`);
}
console.timeEnd();

或者试试看online .

关于javascript - JS 对象数组与 JS 对象数组效率和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46315331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com