Skip to content

Instantly share code, notes, and snippets.

@noxi515
Last active February 3, 2018 17:34
Show Gist options
  • Save noxi515/f12faeb7f6d4ed879a7219b06922886c to your computer and use it in GitHub Desktop.
Save noxi515/f12faeb7f6d4ed879a7219b06922886c to your computer and use it in GitHub Desktop.
JS Array-loop performance
// Initialize
console.time("initialize");
const size = 10000000;
const a = new Array(size).fill(0).map((v, i) => i);
const records = {
"for": [],
"for-of": [],
"forEach": [],
"map": [],
"reduce": []
};
let sum = 0;
console.timeEnd("initialize");
// for
for (let i = 0; i < 10; i++) {
sum = 0;
const start = Date.now();
console.time("for");
for (let j = 0; j < size; j++) {
sum += a[j];
}
console.timeEnd("for");
const end = Date.now();
console.log(`for result: ${sum}`);
records["for"][i - 1] = [start, end];
}
// for-of
for (let i = 0; i < 10; i++) {
sum = 0;
const start = Date.now();
console.time("for-of");
for (const v of a) {
sum += v;
}
console.timeEnd("for-of");
const end = Date.now();
console.log(`for-of result: ${sum}`);
records["for-of"][i - 1] = [start, end];
}
// forEach
for (let i = 0; i < 10; i++) {
sum = 0;
const start = Date.now();
console.time("forEach");
a.forEach(v => sum += v);
console.timeEnd("forEach");
const end = Date.now();
console.log(`forEach result: ${sum}`);
records["forEach"][i - 1] = [start, end];
}
// map
for (let i = 0; i < 10; i++) {
sum = 0;
const start = Date.now();
console.time("map");
a.map(v => sum += v);
console.timeEnd("map");
const end = Date.now();
console.log(`map result: ${sum}`);
records["map"][i - 1] = [start, end];
}
// reduce
for (let i = 0; i < 10; i++) {
const start = Date.now();
console.time("reduce");
sum = a.reduce((s, v) => s + v, 0);
console.timeEnd("reduce");
const end = Date.now();
console.log(`reduce result: ${sum}`);
records["reduce"][i - 1] = [start, end];
}
// Result
for (const type in records) {
const times = [];
for (const [start, end] of records[type]) {
times.push(end - start);
}
console.log(`${type} average: ${times.sort((a, b) => a - b).slice(0, 5).reduce((s, v) => s + v, 0) / 5}ms`);
}
// Initialize
console.time("initialize");
const size = 10000000;
const a = new Array(size).fill(0).map((v, i) => i);
const records = {
"for": [],
"for-of": [],
"forEach": [],
"map": [],
"reduce": []
};
console.timeEnd("initialize");
// for
for (let i = 0; i < 10; i++) {
let sum = 0;
const start = Date.now();
console.time("for");
for (let j = 0; j < size; j++) {
sum += a[j];
}
console.timeEnd("for");
const end = Date.now();
console.log(`for result: ${sum}`);
records["for"][i - 1] = [start, end];
}
// for-of
for (let i = 0; i < 10; i++) {
let sum = 0;
const start = Date.now();
console.time("for-of");
for (const v of a) {
sum += v;
}
console.timeEnd("for-of");
const end = Date.now();
console.log(`for-of result: ${sum}`);
records["for-of"][i - 1] = [start, end];
}
// forEach
for (let i = 0; i < 10; i++) {
let sum = 0;
const start = Date.now();
console.time("forEach");
a.forEach(v => sum += v);
console.timeEnd("forEach");
const end = Date.now();
console.log(`forEach result: ${sum}`);
records["forEach"][i - 1] = [start, end];
}
// map
for (let i = 0; i < 10; i++) {
let sum = 0;
const start = Date.now();
console.time("map");
a.map(v => sum += v);
console.timeEnd("map");
const end = Date.now();
console.log(`map result: ${sum}`);
records["map"][i - 1] = [start, end];
}
// reduce
for (let i = 0; i < 10; i++) {
const start = Date.now();
console.time("reduce");
const sum = a.reduce((s, v) => s + v, 0);
console.timeEnd("reduce");
const end = Date.now();
console.log(`reduce result: ${sum}`);
records["reduce"][i - 1] = [start, end];
}
// Result
for (const type in records) {
const times = [];
for (const [start, end] of records[type]) {
times.push(end - start);
}
console.log(`${type} average: ${times.sort((a, b) => a - b).slice(0, 5).reduce((s, v) => s + v, 0) / 5}ms`);
}
(() => {
// Initialize
console.time("initialize");
const size = 10000000;
const a = new Array(size).fill(0).map((v, i) => i);
const records = {
"for": [],
"for-of": [],
"forEach": [],
"map": [],
"reduce": []
};
console.timeEnd("initialize");
// for
for (let i = 0; i < 10; i++) {
let sum = 0;
const start = Date.now();
console.time("for");
for (let j = 0; j < size; j++) {
sum += a[j];
}
console.timeEnd("for");
const end = Date.now();
console.log(`for result: ${sum}`);
records["for"][i - 1] = [start, end];
}
// for-of
for (let i = 0; i < 10; i++) {
let sum = 0;
const start = Date.now();
console.time("for-of");
for (const v of a) {
sum += v;
}
console.timeEnd("for-of");
const end = Date.now();
console.log(`for-of result: ${sum}`);
records["for-of"][i - 1] = [start, end];
}
// forEach
for (let i = 0; i < 10; i++) {
let sum = 0;
const start = Date.now();
console.time("forEach");
a.forEach(v => sum += v);
console.timeEnd("forEach");
const end = Date.now();
console.log(`forEach result: ${sum}`);
records["forEach"][i - 1] = [start, end];
}
// map
for (let i = 0; i < 10; i++) {
let sum = 0;
const start = Date.now();
console.time("map");
a.map(v => sum += v);
console.timeEnd("map");
const end = Date.now();
console.log(`map result: ${sum}`);
records["map"][i - 1] = [start, end];
}
// reduce
for (let i = 0; i < 10; i++) {
const start = Date.now();
console.time("reduce");
const sum = a.reduce((s, v) => s + v, 0);
console.timeEnd("reduce");
const end = Date.now();
console.log(`reduce result: ${sum}`);
records["reduce"][i - 1] = [start, end];
}
// Result
for (const type in records) {
const times = [];
for (const [start, end] of records[type]) {
times.push(end - start);
}
console.log(`${type} average: ${times.sort((a, b) => a - b).slice(0, 5).reduce((s, v) => s + v, 0) / 5}ms`);
}
})();
(() => {
// Initialize
console.time("initialize");
const size = 10000000|0;
const a = new Array(size).fill(0).map((v, i) => i|0);
const records = {
"for": [],
"for-of": [],
"forEach": [],
"map": [],
"reduce": []
};
console.timeEnd("initialize");
// for
for (let i = 0|0; i < 10|0; i++) {
let sum = 0|0;
const start = Date.now();
console.time("for");
for (let j = 0|0; j < size; j++) {
sum += a[j]|0;
}
console.timeEnd("for");
const end = Date.now();
console.log(`for result: ${sum}`);
records["for"][i - 1] = [start, end];
}
// for-of
for (let i = 0|0; i < 10|0; i++) {
let sum = 0|0;
const start = Date.now();
console.time("for-of");
for (const v of a) {
sum += v|0;
}
console.timeEnd("for-of");
const end = Date.now();
console.log(`for-of result: ${sum}`);
records["for-of"][i - 1] = [start, end];
}
// forEach
for (let i = 0|0; i < 10|0; i++) {
let sum = 0|0;
const start = Date.now();
console.time("forEach");
a.forEach(v => sum += v|0);
console.timeEnd("forEach");
const end = Date.now();
console.log(`forEach result: ${sum}`);
records["forEach"][i - 1] = [start, end];
}
// map
for (let i = 0|0; i < 10|0; i++) {
let sum = 0|0;
const start = Date.now();
console.time("map");
a.map(v => sum += v|0);
console.timeEnd("map");
const end = Date.now();
console.log(`map result: ${sum}`);
records["map"][i - 1] = [start, end];
}
// reduce
for (let i = 0|0; i < 10|0; i++) {
const start = Date.now();
console.time("reduce");
const sum = a.reduce((s, v) => (s|0 + v|0)|0, 0|0);
console.timeEnd("reduce");
const end = Date.now();
console.log(`reduce result: ${sum}`);
records["reduce"][i - 1] = [start, end];
}
// Result
for (const type in records) {
const times = [];
for (const [start, end] of records[type]) {
times.push(end - start);
}
console.log(`${type} average: ${times.sort((a, b) => a - b).slice(0, 5).reduce((s, v) => s + v, 0) / 5}ms`);
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment