WebWorkerとのpostMessageの遅延はどれくらいか

WebWorkerとのpostMessageに掛る時間をシンプルに計測する物を作りました。

https://misinoe.github.io/WebworkerPostmessageTest/

開発時間は15分程度。

目的

OffscreenCanvas を使用するため、 WebWorker の特性を理解するためのパフォーマンス測定です。

OffscreenCanvas は描画に関わる処理を WebWorker に行わせる事でメインスレッドの負担を減らし、Webサイトのパフォーマンスを向上させる事ができます。

とはいえ、 WebWorkerとのデータのやり取りに主だって使う Worker.postMessage() はどれくらいの時間がかかるでしょうか?

もし、 16.67ms より時間がかかる場合、60Hzのディスプレイでは1フレーム以上の遅延が発生するだろうと推測する事ができます。

更に 100ms や、それ以上かかってしまうならば、もはやユーザーのタッチやクリックに反応するグラフィックの描画をWebWorkerに任せる事ができないと言えるでしょう。

それらを明らかにするため測定をします。

https://misinoe.github.io/WebworkerPostmessageTest/

結果

  • 往復 1ms 以下
    • 大体 0.2 ~ 0.3 ms 程度
  • データの量によって多少遅くなる
  • また、割り込み処理じゃないのでonmessageの受け取り側の状況によって多少遅延する
Written on March 2, 2019