11521 sujets

JavaScript, DOM et API Web HTML5

Salut !

Je voulais vous interroger sur l'efficacité des différentes méthodes pour arriver à un résultat en JS.

Pour prendre l'exemple d'un de mes exercices:

Je dois calculer le nombre de jeunes, de "moyens" et de séniors. Pour ce faire, je dois créer un script qui demande un âge à l'utilisateur, et tant qu'il n'a pas entrer un âge supérieur à 99, le programme continue de demander des âges.

Pour résoudre cet exercice, j'ai tout bêtement fait des arrays et j'ai mis des conditions dans un do while pour répartir les valeurs dans les arrays.

var tableauJeunes = [];
var tableauMoyens = [];
var tableauVieux = [];

do{
    n = parseInt(window.prompt("Âge ? / Entrez un centenaire pour arrêter"));

    if(n < 20){
        tableauJeunes.push(n)
    }else if(n >= 20 && n <= 40){
        tableauMoyens.push(n)
    }else if(n > 40){
        tableauVieux.push(n);
    };

}while(n < 99);


Edit: Après le do while, j'utilise tableauX.length pour faire le décompte.

Mais voilà. Il se trouve qu'on peut également compter le nombre de jeunes, de moyens et de séniors sans faire de tableau. On peut faire des conditions pour savoir si c'est un jeune, un moyen ou un vieux et selon le résultat faire un décompte avec une boucle.


Le contexte étant posé je me demande laquelle de ces deux méthodes serait la plus efficace ? La méthode des arrays est-elle problématique, niveau performance ?
Modifié par RCK (17 Nov 2019 - 19:26)
Salut RCK,

On utilise des tableaux quand on veut manipuler les données qu'ils contiennent. Si ton objectif c'est uniquement de compter, alors il suffit d'incrémenter une variable à chaque fois que la condition est remplie. C'est une opération qui n'est pas gourmande et ça coûte moins d'espace en mémoire.
Alors y'a mille façon de faire !

Tu peux, au lieu de faire un tableau

- mettre le résultat dans un objet JS,
- mettre le résultat dans une sessionStorage ou LocalStorage
- mettre le résultat dans du JSON
- mettre le résultat dans du XML
- mettre le résultat dans en BDD lol

Etc.... etc...


perso je préfère les objets :
exemple : https://codepen.io/JUSEN/pen/qBBLVQx
Salut,

Merci d'avoir pris le temps de me répondre Smiley smile

Je vois qu'effectivement les possibilités ne manquent pas mais comment évaluer la méthode la plus "opti" ? Comment puis-je mesurer la consommation (en mémoire) et les performances d'un script ?

Est-ce qu'on utilise des outils pour ça ?
Pour tester tu fais de gros tableaux et tu regardes le temps passé avec date.
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Date

Et il n'y a vraiment pas de raison d'avoir des problèmes de performances pour ce genre de chose car même sur des millions d'itérations ce n'est pas un souci :
https://codepen.io/bacasable/pen/ExxrKwz

D'une manière générale il ne faut pas chercher a faire des optimisations prématurés quand ça ne relève pas du bon sens car tu vas passer énormément de temps sur des scripts alors que ce n'est pas nécessaire.

Aussi comme te l'a dit Anymah, cela n'a pas de sens d'ajouter a chaque fois un élément a tes tableaux. Si tu ne fais rien d'autre avec, tu devrais simplement incrémenter une variable.
Super, merci Bacasable !

Effectivement, je viens de voir avec Date().getMilliseconds() et les différences sont ridicules.
Je crois même que le plus lourd dans tout ça, c'est de mesurer le temps entre le début et la fin de la fonction Smiley langue

Surtout qu'en réalité, on parle de mettre 3 ou 4 valeurs dans un tableau, et non des dizaines de milliers.

Bon, ça me rassure tout ça Smiley smile

Merci à tous pour le coup de main !