개요
JS에서 각 객체의 깊은 복사 방식에 따른 수행시간을 간단하게 비교한다.
원본 객체
const obj1 = {
a: 1,
b: "string",
c: {
name: "Leon",
age: "29"
}
};
JSON 복사
function jsonCopy(obj){
return JSON.parse(JSON.stringify(obj));
}
Lodash 복사
function lodashCopy(obj){
return lodash.cloneDeep(obj);
}
재귀함수 복사
/** 객체 깊은 복사 */
function cloneObjectDeep(obj) {
const clone = {};
if (typeof obj !== 'object') return obj;
for (const key in obj) {
const value = obj[key];
if (Array.isArray(value)) {
clone[key] = cloneArrayDeep(value);
} else if (value instanceof Date) {
clone[key] = value;
} else if (typeof value === 'object' && value != null) {
clone[key] = cloneObjectDeep(value);
} else {
clone[key] = value;
}
}
return clone;
}
/** 배열 깊은 복사 */
function cloneArrayDeep(arr) {
const clone = [];
if (Array.isArray(arr) === false) return clone;
for (const item of arr) {
if (Array.isArray(item)) {
clone.push(cloneArrayDeep(item));
} else if (item instanceof Date) {
clone.push(item);
} else if (typeof item === 'object' && item != null) {
clone.push(cloneObjectDeep(item));
} else {
clone.push(item);
}
}
return clone;
}
테스트 결과
결론
- JSON 복사 방식이 가장 느리다.
- 재귀함수 방식이 JSON 방식보다 약 15배 빠르다.
- 재귀함수 방식으로 객체를 복사하자.
참고자료
'컴퓨터 공학 > JavaScript' 카테고리의 다른 글
데스크탑에서 JS 또는 TS Playground 앱 (RunJS) (0) | 2022.01.13 |
---|---|
TypeScript 4.3 신기능 정리 (0) | 2022.01.13 |
Node.js와 C++의 퀵정렬 속도 비교 (+메모리 할당 개선) (0) | 2021.06.07 |
Node.js에서 기본 정렬 / 합병정렬 / 퀵정렬 속도 비교 (0) | 2021.06.07 |
Node.js 이벤트 루프 정리 (0) | 2021.04.17 |