[javascript] Fuse.js의 성능 최적화 방법

Fuse.js는 JavaScript에서 사용되는 강력한 문자열 검색 라이브러리입니다. 하지만 매우 큰 데이터 세트에서 검색을 수행할 때 성능의 문제점이 발생할 수 있습니다. 이러한 문제를 해결하기 위해 Fuse.js를 성능 최적화하는 몇 가지 방법을 알아보겠습니다.

1. 검색 범위 제한하기

Fuse.js는 기본적으로 데이터 세트 전체를 검색 대상으로 설정합니다. 그러나 실제로 검색이 필요한 일부 속성만 포함하는 새로운 배열을 생성하여 검색 범위를 제한할 수 있습니다. 이렇게 하면 검색 속도가 향상됩니다.

const fuse = new Fuse(data, {
  keys: ['title', 'author', 'description'],
});

const results = fuse.search('query');

위의 예제에서 keys 옵션으로 검색 대상 속성을 정의하고 새로운 fuse 객체를 생성합니다. 그리고 search 메서드를 호출하여 원하는 검색 쿼리를 전달합니다.

2. 검색 결과 개수 제한하기

기본적으로 Fuse.js는 모든 검색 결과를 반환합니다. 하지만 실제로 필요한 결과의 개수가 제한되어 있다면 limit 옵션을 사용하여 반환되는 결과의 개수를 제한할 수 있습니다.

const fuse = new Fuse(data, {
  keys: ['title'],
  limit: 5,
});

const results = fuse.search('query');

위의 예제에서 limit 옵션으로 결과 개수를 5개로 제한합니다.

3. 정확도 임계값 조정하기

Fuse.js는 검색 결과의 정확도를 판단하기 위해 기본적으로 임계값을 사용합니다. 임계값은 0과 1 사이의 값으로 설정되며 더 높은 값은 더 엄격한 검색 결과를 반환합니다. 이 임계값을 조정하여 원하는 정확도를 얻을 수 있습니다.

const fuse = new Fuse(data, {
  keys: ['title'],
  threshold: 0.6,
});

const results = fuse.search('query');

위의 예제에서 threshold 옵션으로 임계값을 0.6으로 설정합니다.

4. 인덱싱 사용하기

매번 검색할 때마다 Fuse.js는 데이터 세트를 순회하며 검색을 수행합니다. 이런 반복 작업은 성능을 저하시킬 수 있습니다. 따라서 데이터 세트를 미리 인덱싱해두면 검색 속도를 크게 향상시킬 수 있습니다.

const fuse = new Fuse(data, {
  keys: ['title'],
  useExtendedSearch: true,
});

fuse.setIndex(data);

위의 예제에서 useExtendedSearch 옵션을 사용하여 인덱싱을 활성화하고, setIndex 메서드로 데이터 세트를 인덱싱합니다. 이렇게 하면 검색 성능이 향상됩니다.

Fuse.js는 강력한 문자열 검색 라이브러리로서 성능 최적화에 대한 여러 가지 옵션을 제공합니다. 이러한 옵션을 사용하여 큰 데이터 세트에서도 효율적인 검색을 수행할 수 있습니다. Fuse.js 공식 문서를 참조하여 더 많은 성능 최적화 방법을 알아보세요.

참고 자료