getBoundingClientRect vs. offsetWidth/offsetHeight

JavaScript performance comparison

Revision 18 of this test case created

Preparation code

<div id="foo" style="width:500px; height:500px; padding:10px; border:10px solid #000000;">
</div>
<script>
Benchmark.prototype.setup = function() {
    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);
    }
};
</script>

Preparation code output

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
getBoundingClientRect
var boundingClientRect = foo.getBoundingClientRect();
pending…
offsetWidth/offsetHeight
/*
var width = foo.offsetWidth;
var height = foo.offsetHeight;
*/

var width = getOffsetWidth(foo);
var height = getOffsetHeight(foo);
 
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:

0 comments

Add a comment