Executing rings with JS

The key missing thing that Jens didn't say is that when your web page yields in JS and then eventually the browser starts you up again, it starts you from the beginning, with nothing on the stack. So any state you'd like to have after the yield has to be stored semi-permanently. Life would be so much easier if browsers were true multithreading systems in which returning from a yield started you where you left off.

I'm afraid it's not exactly the truth.
You may take a look at the test project
https://snap.berkeley.edu/snap/snap.html#present:Username=dardoro&ProjectName=MIcro%20lag%20test&editMode&noRun
Exactly the same amount of work - 60 iterations of "move(8)" for 400 sprites is performed in three ways.
Simple loop initiated by broadcast took 1-1.5sm as expected.
The same loop started by "launch" for each sprite took 5-7 times longer.
Iterations "powered" by broadcast tick are 10 times longer.
Amount of graphic work is exactly the same only control structures differ. Also difference in sprites movement is astonishing.

Okay, I believe you. More work to do...