tamakipedia

フロントエンドエンジニア。Typescriptもう特訓中です。一日の振り返りや学んだことをちょっとずつ吐いています。

【javascript】webworkerについて

こんにちは! ampなどに使われるwebworkerについて気になったのでまとめてみました。

webworkerとは

javascriptをマルチスレッドで処理を行えるようにした、web api の一つです。
メインスレッドを止めることなくjavascriptを利用できるようになります。
オブジェトを送り合う「メッセージング」と呼ばれる機能を利用しています。

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

何に使われているか

・ampのamp-scriptコンポーネント
・(やったことないけど、vueでも使うことあるみたい)

メリット・デメリット

メリット
・メインスレッドを妨げずにjavascriptを利用できる
デメリット
・アクセスできないオブジェクトがある

利用可能 不可能
navigator
location
XHR
window
document
DOM

使用方法

①ワーカーを作成

const worker = new Worker('worker.js');

②メッセージ送信

worker.postMessage('Hello');

③worker.js側でメッセージを受信

self.addEventListener('message', (message) => {
    console.log(message.data);
});

など。

ちなみにサーバー立てないとエラーを吐きます。
https://teratail.com/questions/167546

対応ブラウザ

safarichromefirefox、などでは利用可能です。
"webworker" | Can I use... Support tables for HTML5, CSS3, etc

参考

https://scrapbox.io/shokai/WebWorker%E3%82%92production%E3%81%A7%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%8B%E8%A9%B1

http://www.ric.co.jp/book/contents/pdfs/893_4_4.pdf