Toggle navigation
MeasureThat.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
ResizeObserver vs ResizeObserver polyfill
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
Browser:
Chrome 119
Operating system:
Linux
Device Platform:
Desktop
Date tested:
2 years ago
Test name
Executions per second
ResizeObserver
4613.6 Ops/sec
ResizeObserver polyfill
5004.3 Ops/sec
HTML Preparation code:
<div> Hello </div>
Tests:
ResizeObserver
let value; const observer = new ResizeObserver(entries => { value = entries[0].contentRect.width; }) observer.observe(document.body) for (let i = 500; i <= 1920; i++) { window.resizeTo(i, 1000) }
ResizeObserver polyfill
class ResizeObserver { constructor(callback) { this.observables = []; this.boundCheck = this.check.bind(this); this.boundCheck(); this.callback = callback; } observe(el) { if (this.observables.some((observable) => observable.el === el)) { return; } const newObservable = { el: el, size: { height: el.clientHeight, width: el.clientWidth } } this.observables.push(newObservable); } unobserve(el) { this.observables = this.observables.filter((obj) => obj.el !== el); } disconnect() { this.observables = []; } check() { const changedEntries = this.observables.filter((obj) => { const currentHeight = obj.el.clientHeight; const currentWidth = obj.el.clientWidth; if (obj.size.height !== currentHeight || obj.size.width !== currentWidth) { obj.size.height = currentHeight; obj.size.width = currentWidth; return true; } }).map((obj) => obj.el); if (changedEntries.length > 0) { this.callback(changedEntries); } window.requestAnimationFrame(this.boundCheck); } } let value; const observer = new ResizeObserver(entries => { value = entries[0].contentRect.width; }) observer.observe(document.body) for (let i = 500; i <= 1920; i++) { window.resizeTo(i, 1000) }