Math vs. for (v4)

Revision 4 of this benchmark created by Douglas Bagnall on


Description

Notes: As should be expected, there is little to choose between max and min.

Math.max.apply will break on large arrays, at least in chrome 11.

The browsers are all over the place on this.

Firefox 4 slows down significantly if a float is compared to an integer, even if the float isn't in the array (i.e., it was a starting value).

Preparation HTML

<script>
  var data = [175, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275];
  var data_float = [175, 100, -3.14, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275, 100, 300, 275];
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Math max
var max = Math.max.apply(null, data);
ready
For max
var max = data[0];
for (var i = 1, length = data.length; i < length; i++) {
 var val = data[i];
 if (val > max) {
  max = val;
 }
}
ready
Math min
var min = Math.min.apply(null, data);
ready
For min
var min = data[0];
for (var i = 1, length = data.length; i < length; i++) {
 var val = data[i];
 if (val < min) {
  min = val;
 }
}
ready
reduce max
var max = data.reduce(Math.max, -Infinity);
ready
reduce min
var min = data.reduce(Math.min, Infinity);
ready
for + Math.max
var max = data[0];
for (var i = 1, length = data.length; i < length; i++) {
 var max = Math.max(max, data[i]);
}
ready
for + localised Math.min
var min = data[0];
for (var i = 1, _min = Math.min, length = data.length; i < length; i++) {
 var min = _min(min, data[i]);
}
ready
for + Math.min (start with inf)
var min = 1e999;
for (var i = 0, length = data.length; i < length; i++) {
 var min = Math.min(min, data[i]);
}
ready
Float data: for + Math.min (start with inf)
var min = 1e999;
for (var i = 0, length = data_float.length; i < length; i++) {
 var min = Math.min(min, data_float[i]);
}
ready
Float data: for + Math.min
var min = data_float[0];
for (var i = 1, length = data_float.length; i < length; i++) {
 var min = Math.min(min, data_float[i]);
}
ready
for max -- if, no local var
var max = data[0];
for (var i = 1, length = data.length; i < length; i++) {
 if (data[i] > max) {
  max = data[i];
 }
}
ready

Revisions

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

  • Revision 4: published by Douglas Bagnall on