var arr = [];
var max = -Infinity;
for (i = 0; i < 4096; i++) {
arr.push(Math.random() * i);
}
function mathMax (array) {
return Math.max.apply(Math, array);
}
function forLoop (array) {
for (let i = 0, len = arr.length; i < len; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
}
max = Math.max.apply(Math, arr);
max = Math.max(arr);
for (let i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
for (let i = 0, len = arr.length; i < len; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
for (let i = arr.length - 1; i >= 0; i--) {
if (arr[i] > max) {
max = arr[i];
}
}
for (const value of arr) {
if (value > max) {
max = value;
}
}
max = mathMax(arr)
max = forLoop(arr)
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
Math.max.apply | |
Math.max with spread | |
basic for loop | |
for loop length caching | |
for loop reverse | |
for-of loop | |
Math.max.apply extracted into separate function | |
for loop length caching extracted into separate function |
Test name | Executions per second |
---|---|
Math.max.apply | 246742.0 Ops/sec |
Math.max with spread | 52866.6 Ops/sec |
basic for loop | 1674.5 Ops/sec |
for loop length caching | 2496.5 Ops/sec |
for loop reverse | 2499.1 Ops/sec |
for-of loop | 4625.6 Ops/sec |
Math.max.apply extracted into separate function | 269100.9 Ops/sec |
for loop length caching extracted into separate function | 2324.1 Ops/sec |
I'll break down the benchmark and explain what's being tested, compared, and their pros and cons.
Benchmark Overview
The benchmark compares different approaches to find the maximum value in an array of numbers:
Math.max.apply
with an array using .apply
Math.max
with the spread operator (...
)Math.max.apply
helper functionLibrary and Features
Math.max
function.Test Cases
Each test case has a unique implementation:
Math.max.apply
: Uses Math.max.apply
with an array using .apply
.Math.max with spread
: Uses Math.max
with the spread operator (...
).Math.max.apply
extracted into separate function: Extracts the logic from Math.max.apply
into a separate helper function.Comparison and Pros/Cons
The benchmark compares the performance of each approach on different hardware configurations. Here's a brief summary:
Math.max.apply
and Math.max with spread
are likely to be the fastest since they use optimized built-in functions.Benchmark Results
The benchmark results show that Math.max.apply
and Math.max with spread
are consistently among the fastest, while the basic for loop and other approaches tend to be slower. However, the results also suggest that there may be some variation in performance depending on the specific hardware configuration.
In summary, this benchmark provides a useful comparison of different approaches to finding the maximum value in an array, highlighting the importance of optimizing built-in functions and breaking down complex logic into smaller pieces.