Have you benchmarked the overhead of awaiting? I believe that in doing so you yield to the microtask queue and then your function has to be scheduled and run again. You could compare
await yieldOrContinue('user-visible');
doSomeWork();
against if (isTimeToYield('user-visible')) {
await yieldControl('user-visible');
}
doSomeWork();
A few years back when I measured it on a fast laptop the cost was ~1µs to do `await 0;`