Comprehensive review of Layout/Reflow performance, Paul Irish's DOM triggers, thrashing mechanics, and Long Animation Frames API.
Layout is the computational phase where Blink calculates the geometric positions, bounding boxes, and dimensional constraints of all DOM nodes:
width, height, top, left, margin, padding, flex-basis, font-size) invalidates the geometry of the mutated element, its descendants, and potentially all sibling and ancestor flow nodes.Under normal operation, the browser batches style and DOM mutations, calculating layout once per frame immediately before the V-Sync deadline.
As cataloged by Paul Irish in "What forces layout / reflow":
offsetWidth, offsetHeight, offsetLeft, offsetTop, clientWidth, clientHeight.scrollWidth, scrollHeight, scrollLeft, scrollTop.getBoundingClientRect(), getClientRects().window.getComputedStyle().Occurs when FSL happens in a loop inside an animation frame:
blockingDuration, renderDuration, styleAndLayoutStart, and exact script attribution.PerformanceObserver({ type: 'long-animation-frame' }) provides direct, objective empirical confirmation of layout thrashing jank.Built by Axyl. A performance auditing toolkit for motion-heavy web interfaces.
Last updated: 10/7/2026