function speedTest(times) {
let shiftAvg = 0;
let spliceAvg = 0;
let sliceAvg = 0;
let destructuringAvg = 0;
let t0, t1;
let fruits = Array(10000).fill('test');
for (var i = 0; i < times; i++) {
t0 = performance.now();
let a = fruits.shift();
t1 = performance.now();
shiftAvg += t1 - t0;
resetFruits();
t0 = performance.now();
let [b] = fruits.splice(0, 1);
t1 = performance.now();
spliceAvg += t1 - t0;
resetFruits();
t0 = performance.now();
let c;
[c, fruits] = [...fruits.slice(0, 1), fruits.slice(1)];
t1 = performance.now();
sliceAvg += t1 - t0;
resetFruits();
t0 = performance.now();
let d;
[d, ...fruits] = fruits;
t1 = performance.now();
destructuringAvg += t1 - t0;
resetFruits();
}
shiftAvg = shiftAvg / times;
spliceAvg = spliceAvg / times;
sliceAvg = sliceAvg / times;
destructuringAvg = destructuringAvg / times;
return [
{"avg": destructuringAvg, "approach": 'destructuring'},
{"avg": spliceAvg, "approach": 'splice'},
{"avg": sliceAvg, "approach": 'slice'},
{"avg": shiftAvg, "approach": 'shift'}
];
function resetFruits() {
fruits = Array(10000).fill('test');
}
}
let result = speedTest(20000).sort((a, b) => (a.avg > b.avg) ? 1 : -1);
result.map((item, index, self) => {
if(index === 0) {
console.log(index + 1, item.approach, item.avg, `fastest`);
}
else {
console.log(index + 1, item.approach, item.avg, `${parseInt(item.avg / self[0].avg * 100 - 100)}% slower`);
}
});