Web Workers API

https://developer.mozilla.org/ja/docs/Web/API/Web_Workers_API/Using_web_workers
https://qiita.com/mohayonao/items/872166cf364e007cf83d
Web Worker は、javascript でスレッド処理を行うためのAPI
Worker用に用意された、呼び出し元とは別の JavaScript ファイルを別スレッドで実行する。
Worker用のスクリプトはwindowがグローバルオブジェクトではないので、直接DOM操作などは行えない。
postMessageメソッドを実行することで、"message"イベントが発生するのでそれを使ってスレッド間で通信を行う。

// useWorker.html
function runWorker() {
	var worker = new Worker("worker.js");
	
	worker.addEventListener("message", function(e) {
		console.log(e.data);
	});
	
	worker.postMessage("paramater");
}

// worker.js
self.addEventListener("message", function(e) {
	var result = doSomething(e.data);  // 時間がかかる処理
	self.postMessage(result);
});

基本的に2つファイルが必要だが、自分自身をワーカーファイルとして利用したり、ワーカーファイルに書く文字列をBlobオブジェクトにしてそれを読んだりすることで、1つのファイルでWorkerAPIを扱う手法もある。