jsPerf.app is an online JavaScript performance benchmark test runner & jsperf.com mirror. It is a complete rewrite in homage to the once excellent jsperf.com now with hopefully a more modern & maintainable codebase.
jsperf.com URLs are mirrored at the same path, e.g:
https://jsperf.com/negative-modulo/2
Can be accessed at:
https://jsperf.app/negative-modulo/2
Testing different ways of setting/reading data-* attributes using jQuery, especially after noticing that Twitter's Bootstrap uses $.fn.attr('data-X') instead of $.fn.data('X')...
Using the Browserscope table (click on the Browserscope logo above the charts) would probably allow for more useful filtering of the data, and thus ease comparing the speed of the different write+read tests versus the different read-only tests.
Thanks for helping!
<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<div id="rw"></div><div id="ro" data-text="readonly"></div>
<script>
// 'el-lo read-write element
var $rw = $('#rw');
var rw = $rw[0];
// 'el-lo read-only element
var $ro = $('#ro');
var ro = $ro[0];
var get; // access holder, so that dead stores aren't so easily culled off.
// Store only 19 strings to test.
// In real code, there usually are not very many
// unique keys that get accessed and mutated.
// It needs to be odd so that after counter%limit loops,
// the attr/prop/data accessors return values.
// This also shakes up the key/value pairs.
var counter, limit = 19;
var rnd = [];
// Pre-create all strings unique, just to make sure nothing funny happens.
for (var i = 0; i < limit; i++) {
rnd[i] = 'X-' + i + '-' + Math.floor(Math.random() * 1001);
}
function nextKey() { return rnd[counter++ % limit]; }
function nextVal() { return rnd[counter++ % limit]; }
</script>
counter = 0;
Ready to run.
Test | Ops/sec | |
---|---|---|
jQuery.fn.attr (R+W) |
| ready |
jQuery.fn.prop (R+W) |
| ready |
jQuery.fn.data (R+W) |
| ready |
jQuery.data(rw) (R+W) |
| ready |
jQuery.data($rw) (R+W) |
| ready |
jQuery.fn.attr (RO) |
| ready |
jQuery.fn.prop (RO) |
| ready |
jQuery.fn.data() (RO) |
| ready |
jQuery.data(ro) (RO) |
| ready |
jQuery.data($ro) (RO) |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.