Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

궁금증 해결소 #510

Open
areumsheep opened this issue Sep 29, 2022 · 3 comments
Open

궁금증 해결소 #510

areumsheep opened this issue Sep 29, 2022 · 3 comments
Assignees

Comments

@areumsheep
Copy link
Member

areumsheep commented Sep 29, 2022

문제를 풀다가 map과 for문 중 어떤 것이 더 속도가 빠를까? 하는 고민들을 해보신 적이 있으신가요?

사소한 궁금증이지만 직접 해결했다는 뿌듯함을 나눠주세요! 자신만의 의견이 가득 담긴 내용도 좋아요!
너무 어려운 궁금증이라면 도움을 요청해보세요!

다양한 고민들이 쌓여 좋은 시너지를 낼 수 있을거예요 :) 🥳


자바스크립트 속도 테스트 방법 예시

console.time() & console.timeEnd()
https://developer.mozilla.org/en-US/docs/Web/API/console/time

console.time('replace_test');
test_str.replace(/1/g, '#').replace(/0/g, ' ');
console.timeEnd('replace_test');
@areumsheep areumsheep self-assigned this Sep 29, 2022
@areumsheep areumsheep pinned this issue Sep 29, 2022
@areumsheep
Copy link
Member Author

areumsheep commented Sep 29, 2022

.replace()for문 중 어느 것을 사용하는 것이 좋을까?

#505 (review)

위 이슈에서 저와 지아님이 작성한 코드가 상이하여 replace()의 시간 복잡도를 찾아보니 O(n)이라고 나왔습니다.
제 코드에선 .replace()를 체이닝하여 총 2번 사용하였고 for문으로 한 번에 처리하신 지아님과의 비교를 위해 아래 테스트를 진행하였습니다.

테스트 코드

const test_str = '1101011010111011011101101110110101010101101101011101110110101';

console.time('replace_test');
test_str.replace(/1/g, '#').replace(/0/g, ' ');
console.timeEnd('replace_test'); // => 0.018ms

let result = '';
const test_arr = test_str.split('');
const test_arr_length = test_arr.length;

console.time('for_test');
for(let i = 0; i < test_arr_length; i++){
    result += test_arr[i] === '1' ? '#' : ' ';
}
console.timeEnd('for_test'); // => 0.065ms

결론 (환경에 따라 상이함)

replace는 0.018ms
for문은 0.065ms

@areumsheep
Copy link
Member Author

JS의 중복 제거 알고리즘 중 어느 방법이 가장 속도가 빠를까?

#501

위 PR 확인하며 배열을 순회하는 알고리즘을 고민하던 중에 중복 제거 알고리즘 또한 궁금해져 stackoverflow의 내용을 가져오게 되었습니다 :)

결론

https://docs.google.com/spreadsheets/d/1-Vr4dD0GE0dv1PN9Ng6SyNwn8A407L1zw9uE1cBMwjQ/edit#gid=0
image

@areumsheep
Copy link
Member Author

areumsheep commented Oct 2, 2022

forEach와 Object.entries 중 어느 것을 사용하는 것이 좋을까?

#501

지아님께서 좋은 리뷰를 남겨주셨는데요!
바로 Object.entries를 배열에 사용할 수 있다는 리뷰였습니다. array도 object의 프로토타입을 가지고 있으니 사용할 수 있는 것 같아요.

forEach도 callback에 index, value 값을 받을 수 있어서 두 개의 차이를 알아보기 위해 속도를 측정해보았습니다.

테스트 코드

const test = [4,7,12,56,6,3,1,3,5,2,1,5,8,8,3,3,1,23,4,4,67,45,3,53,45,5345345,66];
let answer1 = '', answer2 = '';

console.time('entries_test');
for([index, value] of test.entries()){
    answer1 += index;
};
console.timeEnd('entries_test'); // => entries_test: 0.023ms 

console.time('forEach_test');
test.forEach((cur, index) => {
    answer2 += index;
});
console.timeEnd('forEach_test'); // => forEach_test: 0.025ms 

결론 (환경에 따라 상이함, 주관적인 의견 포함)

  • 일반 for문 (for( ; ; ))은 브라우저 환경 지원을 위해 사용하면 좋을 것 같습니다.
  • forEach와 Object.entries의 속도 차이는 거의 없을 정도입니다.
  • 그럼에도 forEach를 사용해야 하는 이유는 Object.entries()의 경우에는 object를 순회할 수 있어 사용할 변수의 타입을 다시 확인해야 합니다. 배열을 순회함을 명시하기 위해 forEach를 사용하는 것이 좋을 것 같습니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant