📄

Web Worker

に公開

はじめに

Web アプリで重たい処理を実行すると、画面の操作が固まったり、ユーザー体験が悪化したりすることがある。
JavaScript は基本的にシングルスレッドで動作するため、1 つの処理が詰まると他の動作も止まってしまう。
そんなときに使えるのが Web Worker という仕組み。

この記事では、Web Worker の基本や用途、メリットなどをざっくり解説する。

Web Worker とは?

Web Worker は、JavaScript の処理を別スレッドで並列に実行できる機能。

一言で言うと…

UI を止めずに、重い処理を裏でこなしてくれる助っ人

通常の JavaScript はシングルスレッド。重い計算や大きなデータ処理をすると、クリックやスクロールの応答が止まってしまう。
Web Worker を使えば、こうした処理を別スレッドに投げて、UI はそのままサクサク動かせる。

メリット

メリット 説明
UI が止まらない 処理を別スレッドに逃がすことで、ユーザーの操作感を保てる
処理を並列化できる 計算やファイル処理を並列実行できるため高速化しやすい
汎用性が高い CSV・画像・数値処理など幅広い用途に使える
マルチコア CPU を活かせる CPU 資源を効率的に使える

デメリット

デメリット 説明
DOM にアクセスできない HTML や UI 操作は一切不可。処理はあくまで裏方専用
通信がやや面倒 postMessage でのやりとりが必要。非同期&シリアル化が前提
バンドル時に注意が必要 ビルドツールによっては Worker の取り扱いが特殊(webpack, Vite など)
ファイル分割が必要 通常は別ファイルで Worker を定義する必要がある(inlined Worker も可能)

Web Worker はどこで使われている?

実際に Web Worker が使われている場所や、活用されているライブラリの例をいくつか紹介。

データ処理・パース系

ライブラリ 用途 備考
PapaParse CSV の読み込み・変換 大量の CSV を非同期に処理。Worker 対応
arquero JavaScript 製のデータフレーム操作 Python の Pandas 風。Worker で並列処理する構成も組める

画像・動画・音声処理

ライブラリ 用途 備考
ffmpeg.wasm 動画の変換や切り出し WebAssembly + Worker。非常に重い処理をブラウザで完結
Pica 高品質な画像のリサイズ Canvas より高精度。Worker を使った非同期実行が可能

機械学習・AI 系

ライブラリ 用途 備考
TensorFlow.js ブラウザで機械学習モデルを動かす 推論が重いため、Worker と分離すると快適に動かせる構成にできる

PDF 処理系

ライブラリ 用途 備考
pdf.js ブラウザ上で PDF を表示・操作するライブラリ PDF のパースと描画処理を Worker で非同期実行。UI のレスポンスを維持しつつ重たい PDF も扱える

もちろんです!記事のトーンに合わせて、カジュアルだけど要点がしっかり伝わる「まとめ」をご提案します 👇

まとめ

Web Worker を使えば、重たい処理を裏でこなして UI を止めないアプリを作ることができる。
ただし、DOM 操作ができない通信がやや面倒などの制限もあるので、使いどころは見極めが大事。
パフォーマンス改善の選択肢として、頭の片隅に置いておくと役立つかもしれない。

参考サイト

https://developer.mozilla.org/ja/docs/Web/API/Web_Workers_API/Using_web_workers

GitHubで編集を提案

Discussion