✅fizzSearchを並列化する
そこまで高速化する必要ないかなとも思ったが、やっぱり欲しくなった
すぐに検索結果が表示されるようになれば、検索中かどうか出さなくても良くなる
結構タイムラグが発生するときがそこそこある
実装
各補完機能のbackground scriptで、論理プロセッサの数だけ
WebWorkerを事前に作っておく
検索を実行するごとに呼び出されるfizzSearch函数内で
WebWorkerを作ってしまうと、何度も再作成が走って重くなる
こんな感じかな
parallelWork.js// range: [0,1,...,n]を作る函数
// list: 補完候補が入ったリスト
const workerNum = window.navigator.hardwareConcurrency;
const workers = range(workerNum).map(_ => new Worker('worker.js'));
// listをworkerNumだけ分割する
const jobs = range(workerNum).map(i =>
list.slice(i,i+Math.floor(list.length/workerNum)+1))
// 処理を投げる
.map((list, i) =>
return new Promise((resolve, reject) => {
workers[i].addEventListener('message', message => {
resolve(message.data);
}));
// 処理が帰ってくるのを待つ
await Promise.all(jobs).then(...);
17:38:29 実装終了
↑のままではダメだった(詳細はコード見ろ)
うまく動いてくれた
体感ちょっとだけ早くなった気がする
17:56:37 実装終了
バグも直した