Skip to content

fix: coalesce scan() into a single rAF to avoid paint delay on bulk DOM mutations#344

Draft
alexus37 wants to merge 2 commits intomainfrom
fix/coalesce-scan-raf
Draft

fix: coalesce scan() into a single rAF to avoid paint delay on bulk DOM mutations#344
alexus37 wants to merge 2 commits intomainfrom
fix/coalesce-scan-raf

Conversation

@alexus37
Copy link
Copy Markdown

Summary

Fixes #343

When many elements are added to the DOM in a single frame (e.g. a framework rendering a list), the scan() function in lazy-define.ts was scheduling a separate requestAnimationFrame callback for each element. Since all rAF callbacks run before the browser paints, this delayed the first paint proportionally to the number of added elements.

Changes

Replaced the per-element WeakMap + requestAnimationFrame deduplication with:

  • A shared Set<ElementLike> that collects pending elements
  • A single requestAnimationFrame timer that processes all pending elements in one callback

This ensures that no matter how many elements are added in a single frame, only one rAF callback runs before paint.

Testing

Added a test that verifies multiple elements added at once are coalesced into minimal rAF calls rather than one per element. All existing tests continue to pass.

alexus37 and others added 2 commits April 16, 2026 15:50
…OM mutations

Replace per-element WeakMap+rAF deduplication with a shared Set of
pending elements and a single requestAnimationFrame timer. When many
elements are added in one frame (e.g. framework list rendering), only
one rAF callback now runs before paint instead of one per element.

Fixes #343

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

lazy-define scan() schedules per-element requestAnimationFrame, delaying paint on bulk DOM mutations

1 participant