## 比較対象 `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 ```