getBoundingClientRect vs. offsetWidth/offsetHeight (v18)

Revision 18 of this benchmark created on


Preparation HTML

<div id="foo" style="width:500px; height:500px; padding:10px; border:10px solid #000000;">
</div>

Setup

var foo = document.getElementById('foo');
    function _getOffset(elm, height) {
        var cStyle = elm.ownerDocument && elm.ownerDocument.defaultView && elm.ownerDocument.defaultView.getComputedStyle
                && elm.ownerDocument.defaultView.getComputedStyle(elm, null),
                ret = cStyle && cStyle.getPropertyValue(height ? 'height' : 'width') || '';
        if (ret && ret.indexOf('.') > -1) {
                ret = parseFloat(ret)
                        + parseInt(cStyle.getPropertyValue(height ? 'padding-top' : 'padding-left'))
                        + parseInt(cStyle.getPropertyValue(height ? 'padding-bottom' : 'padding-right'))
                        + parseInt(cStyle.getPropertyValue(height ? 'border-top-width' : 'border-left-width'))
                        + parseInt(cStyle.getPropertyValue(height ? 'border-bottom-width' : 'border-right-width'));
        } else {
                ret = height ? elm.offsetHeight : elm.offsetWidth;
        }
        return ret;
    }
    function getOffsetWidth(elm) {
        return _getOffset(elm);
    }
    function getOffsetHeight(elm) {
        return _getOffset(elm, true);
    }

Test runner

Ready to run.

Testing in
TestOps/sec
getBoundingClientRect
var boundingClientRect = foo.getBoundingClientRect();
ready
offsetWidth/offsetHeight
/*
var width = foo.offsetWidth;
var height = foo.offsetHeight;
*/
var width = getOffsetWidth(foo);
var height = getOffsetHeight(foo);
 
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.