外部ファイルを使わない埋込式のWorker (Web Workers API)

1.ワーカーの処理を1つの関数内で記述する。
2.関数の中身を文字列にする。
3.文字列→Blob(text/javascript)→URLに変換。
4.Workerを生成。
<body>
<div>
    <button id="runWorker">Start</button>
</div>
<script>
function defTickWorker() {
    let interval = 1000;
    let intervalID = null;
    self.addEventListener('message', (event) => {
        if(event.data.interval) {
            interval = event.data.interval;
        }

        if(event.data.id == 'Start') {
            intervalID = setInterval(() => {
                postMessage({'id': 'tick'});
            }, interval);
        }
        else if(event.data.id == 'Stop') {
            clearInterval(intervalID);
            intervalID = null;
        }
    });
}
const source = defTickWorker.toString().match(/{.*}/s);
const blob = new Blob([source], {type: 'text/javascript'});
const tickWorker = new Worker(URL.createObjectURL(blob));
tickWorker.addEventListener('message', (event) => {
    console.log("message: " + event.data.id);
});
tickWorker.postMessage({'interval': 100});

const runButton = document.getElementById('runWorker');
runButton.addEventListener('click', (event) => {
    tickWorker.postMessage({'id': event.target.innerText});
    event.target.innerText =
        event.target.innerText == 'Start' ? 'Stop' : 'Start';
});
</script>
</body>