2017-09-20 10 views
2

자바 스크립트 언어에 관한이 질문. 은 간단하게 우리가지도를 가지고 우리가 가장 효과적이고 효율적인 방법 배열의 JS 개체 대 JS 개체의 배열 효율적이고 성능

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"]} 

방식

다음과 같은 항목을 삽입 생각?

지도으로 상당한 삽입 작업이 있다고 생각하면 실적이 좋으면 더 좋을까요?

(내가 잘못 입력 한 경우 수정하십시오. 그 이유는 최대한 간단하게 처리하고 싶습니다.) 감사합니다.

+4

두 방법 모두 결과가 다르므로 나중에이 배열을 어떻게 사용할 것인지에 따라 달라집니다. – gurvinder372

+0

@ gurvinder372 그게 내가 전에 생각한 것입니다. 그러나 각 접근법의 성과를 결정하는 방법은 무엇입니까? – Buddhika

+0

@Buddhika : 성능 문제가 아닙니다. 그것은 당신에게 더 사용하기 쉬운 것에 달려 있습니다. 그리고 그것은 ___Primarily Opinion-Based입니다 .____ – Cerbrus

답변

0

그냥 호기심을 기하기 위해 나는 console.time()을 사용하여 결과를 벤치 마크했습니다.

작업 시작 시간을 추적하는 데 사용할 수있는 타이머를 시작합니다. 각 타이머에 고유 한 이름을 지정하고 주어진 페이지에서 타이머를 최대 10,000 개까지 보유 할 수 있습니다. 이름으로 console.timeEnd()를 호출하면 브라우저는 타이머가 시작된 이후에 경과 된 시간 (밀리 초)을 으로 출력합니다.

이제 그 결과를 고려하는 방법을 신뢰할 수에 대해 주장 할 수있는 결과를 내 컴퓨터에 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을 시도 :

는 [*] 코드 기준으로 벤치 마크에 사용됩니다.

+0

그래서 기본적으로 _ "가장 쉬운 방법으로 작품을 사용하십시오"_는 기본 "기본 의견 기반"답변입니다. – Cerbrus

+0

@Cerbrus 질문이 우리가 사용했던 데이터가 어떻게 될지 알지 못하기 때문에 질문에 대답 할 수있는 충분한 정보가 제공되지 않는다고 생각합니다. –

+0

그럼 왜 제대로 대답 할 수없는 질문에 답을 했습니까? – Cerbrus