## 比較対象
`Another Quick Switcher Plugin`という文字列に対して`aqs`という文字列を10万回試行させる。ロジックは以下の通り。
- 完全一致 `===`
- 前方一致 `startsWith`
- 部分一致 `includes`
- ファジー `fuzzy`
- [[fast-fuzzy]]を利用
- 自作高速ファジー `originalFuzzy`
## コード
```ts
import { fuzzy } from "fast-fuzzy";
const COUNT = 100000;
function getTarget(): string {
return "Another Quick Switcher Plugin";
}
function originalFuzzy(query: string, value: string): boolean {
let i = 0;
for (let j = 0; j < value.length; j++) {
if (value[j] === query[i]) {
i++;
}
if (i === query.length) {
return true;
}
}
return false;
}
function main() {
const target = getTarget();
console.time("match");
for (let i = 0; i < COUNT; i++) {
target === "aqs";
}
console.timeEnd("match");
console.time("startsWith");
for (let i = 0; i < COUNT; i++) {
target.startsWith("aqs");
}
console.timeEnd("startsWith");
console.time("includes");
for (let i = 0; i < COUNT; i++) {
target.includes("aqs");
}
console.timeEnd("includes");
console.time("fuzzy");
for (let i = 0; i < COUNT; i++) {
fuzzy("aqs", target);
}
console.timeEnd("fuzzy");
console.time("originalFuzzy");
for (let i = 0; i < COUNT; i++) {
originalFuzzy("AQS", target);
}
console.timeEnd("originalFuzzy");
}
main();
```
## 結果
オリジナルのfuzzyならパフォーマンスに支障はなさそう。
```console
match: 0.81103515625 ms
match: 0.978ms
startsWith: 2.739013671875 ms
startsWith: 2.957ms
includes: 2.39794921875 ms
includes: 2.553ms
fuzzy: 397.06689453125 ms
fuzzy: 397.192ms
originalFuzzy: 6.27587890625 ms
originalFuzzy: 6.372ms
```