Pages

Performances

 

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.
  1. const data = [];
  2. const random = (min, max) => Math.floor(Math.random() * (max - min)) + min;
  3. for (let i = 0; i < 50000; i++) {
  4.     data.push({ x: random(11000000) });
  5. }

Reduce

Nous pouvons réduire le tableau à un objet contenant les valeurs :
  1. console.time("reduce");   
  2. let {min, max, sum} = data.reduce(function( {max, min, sum}, {x}) {

  3.     min = Math.min(min,x);
  4.     max = Math.max(max,x);
  5.     sum = sum + x;
  6.     return { min, max, sum}
  7.  },
  8.  {min : Number.MAX_VALUE,
  9.  max : Number.MIN_VALUE,
  10.  sum : 0
  11.  });
  12. console.timeEnd("reduce");

  13. console.log( min, max, sum );

Autre

Nous utilisons ici la méthode map qui transforme le tableau d'objets en tableaux de valeurs


  1. console.time("map");    
  2. const mapData = data.map(i => i.x);
  3. const maxData = Math.max(...mapData);
  4. const minData = Math.min(...mapData);
  5. for (let i = 0, sum = 0; i < data.length; sum += data[i++]);
  6. console.timeEnd("map");
  7. 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