Nous avons soulevé Lundi dernier le problème des performances.
Nous allons tenter de comparer l’efficacité de différents code pour l'obtention des valeurs Min, Max et la somme des valeurs d'un tableau.
Remarque : vous ne pouvez tester ces codes avec PythonTutor. Utilisez nodejs.Nous commençons par définir un immense tableau data de 50000 objets.
- const data = [];
- const random = (min, max) => Math.floor(Math.random() * (max - min)) + min;
- for (let i = 0; i < 50000; i++) {
- data.push({ x: random(1, 1000000) });
- }
Nous pouvons réduire le tableau à un objet contenant les valeurs :
- console.time("reduce");
- let {min, max, sum} = data.reduce(function( {max, min, sum}, {x}) {
- min = Math.min(min,x);
- max = Math.max(max,x);
- sum = sum + x;
- return { min, max, sum}
- },
- {min : Number.MAX_VALUE,
- max : Number.MIN_VALUE,
- sum : 0
- });
- console.timeEnd("reduce");
- console.log( min, max, sum );
Autre
- console.time("map");
- const mapData = data.map(i => i.x);
- const maxData = Math.max(...mapData);
- const minData = Math.min(...mapData);
- for (let i = 0, sum = 0; i < data.length; sum += data[i++]);
- console.timeEnd("map");
- console.log(minData,maxData,sum);
Résultats de la comparaison
$ node comparaisonMin.js
reduce: 12.563ms
15 999996 24956286473
map: 24.679ms
15 999996 24956286473
$ node comparaisonMin.js
reduce: 16.015ms
5 999997 25029524292
map: 26.572ms
5 999997 25029524292