incldues
와has
중 뭐가 더 빠를까?
자료구조를 생각해보면 바로 예상이 갈 것이다.
let n = 20000;
let arr = Array.from({ length: n }, (v, i) => i + 1);
console.time( 'includes Test' );
arr.includes(10000)
console.timeEnd( 'includes Test' );
let set = new Set( arr );
console.time( 'has Test' );
set.has(10000)
console.timeEnd( 'has Test' );
incldus Test -> 0.010009765625 ms
has Test -> 0.003173828125 ms
당연하게도 has
로 조회하는게 더 빠르다.
조회 함수 | 시간 복잡도 |
---|---|
Array.incldues | O(n) |
Set.has | O(1) |
결과를 보고 includes
대신 무조건 has
를 써야겠다! 라는 생각이 들 수 있다.
하지만, 항상 has
를 사용하는게 좋은건 아니다.
두가지 경우를 보자!
사이즈가 큰 배열(10만 이상)을 조회하고 싶을 때
set 자료구조에 넣어서 조회하면 매우 빠르게 조회가 가능할 것이다.
하지만, client
단에서 굳이 has
를 사용하기 위해 set
에 배열 데이터를 넣어야할까?
10만 이상의 데이터를 client
단에서 다룰일이 없다고 생각한다.
또한, 10만 이상의 데이터를 조회할 일은 더더욱 없다.
https://stackoverflow.com/questions/39007637/javascript-set-vs-array-performance
위 글을 보면 10만 이상의 데이터를 다룰때 유의미한 차이가 발생한다.
그리고 위 사진처럼 현재 크롬 브라우저에선 배열의 사이즈가 16,777,216
를 넘어서면 maximum size exceeded
에러가 발생한다.
client단에선 includes를 사용하자..!
서버단에서는 db
에 있는 데이터를 조회하는 일이 아니라면 inlcudes
대신 has
를 사용하면 좋을거 같다.
조회에 있어선 has
가 includes
보다 빠르지만, 상황에 맞게 사용해야할 거 같다.
잘못된 정보가 있다면 댓글로 지적 부탁드립니다!🙇♂️