A little thing but a great improvement. I'm now wondering why I did that.
A little thing but a great improvement. I'm now wondering why I did that.
Besides, there is a JavaScript language feature that can give you finer control on routine suspension and resumption, decoupled from any of the microtask or macrotask queue. It's called the generator function. There are some good coroutine libraries based on generator functions, e.g. co.js[3] and redux-saga[4]. You can easily make something similar that can resume the suspended routine according to your scheduling policy that prioritize main thread rendering.
[1]: https://tc39.es/ecma262/#sec-promise-executor [2]: https://v8.dev/blog/fast-async#await-under-the-hood [3]: https://github.com/tj/co [4]: https://redux-saga.js.org
About the generations, do you imagine a function that accepts a generator function and the user uses yield? Something like:
``` mainThreadScheduling(function *(yieldOrContinue) { yield yieldOrContinue; }) ```