generated at
✅fizzSearchを並列化する
そこまで高速化する必要ないかなとも思ったが、やっぱり欲しくなったtakker
すぐに検索結果が表示されるようになれば、検索中かどうか出さなくても良くなる
結構タイムラグが発生するときがそこそこある

実装
各補完機能のbackground scriptで、論理プロセッサの数だけWebWorkerを事前に作っておく
window.navigator.hardwareConcurrencyで論理プロセッサ数を取得できる
ページタイトルリストを分割して各webworkerに投げ、結果をPromise.allで待つ
fizzSearchで分割しないのはWebWorkerをpoolするため
検索を実行するごとに呼び出される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(...);
external-completionに実装してみよう
17:38:29 実装終了
↑のままではダメだった(詳細はコード見ろ)
うまく動いてくれた
体感ちょっとだけ早くなった気がする
17:41:30 emoji-completionにも実装しておく
17:56:37 実装終了
バグも直した