Performance: Coroutine chaining
MEDIUM IMPACT
Coroutine chaining affects frame rendering and responsiveness by controlling how asynchronous tasks run over multiple frames.
IEnumerator GoodChain() {
yield return StartCoroutine(Task1());
yield return StartCoroutine(Task2Async());
yield return StartCoroutine(Task3());
}
IEnumerator Task2Async() {
for(int i=0; i<1000000; i++) {
if(i % 10000 == 0) yield return null; // spread work over frames
}
}IEnumerator BadChain() {
yield return StartCoroutine(Task1());
Task2(); // Runs synchronously, blocking frame
yield return StartCoroutine(Task3());
}
void Task2() {
// Heavy synchronous work
for(int i=0; i<1000000; i++) { /* heavy work */ }
}| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Synchronous heavy task in coroutine chain | N/A | Blocks main thread | Causes frame drops | [X] Bad |
| Asynchronous chunked task with yield return | N/A | Non-blocking | Smooth frame updates | [OK] Good |