Well-written article - I'll enjoy reading the rest of the series in depth.
One nit to pick: "Web Workers run in an isolated thread in the browser. As a result, the code that they execute needs to be contained in a separate file. That’s very important to remember."
This isn't totally true. It is possible to create an "object URL" [0] from a string and run that as a worker, instead of from a separate file:
new Worker(URL.createObjectURL(new Blob([
'self.onmessage = function(msg) { ... }'
]))
I've seen this technique used in several libraries for WebAudio, to run a more accurate timer/scheduler.[0] https://developer.mozilla.org/en-US/docs/Web/API/URL/createO...