IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Performance de calcul


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 21
    Points : 10
    Points
    10
    Par défaut Performance de calcul
    Bonjour à tous,
    Je vous expose mon interrogation actuel.
    Je travail sur un site web client side avec un serveur node.js en back (qui ne fait pas grand chose pour le moment).
    J'ai un algorithme qui va permettre d'effectuer des calculs à partir d'une grande quantité de données côté client, pour que celà n'explose pas la mémoire ou le temps d'execution, je suis obligé de limiter le nombre données en entrée de l'algorithme.
    Maintenant, j'aimerais améliorer ce dernier afin de pouvoir progressivement augmenter la quantité de donnée qu'il va traiter, tout en contrôlant la consommation mémoire et le temps d'execution.

    Voilà le principe de l'aglorithme:
    J'ai des objets json de ce type là (au maximum j'ai 800 objet différents):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var obj1 = {
        a: 10,
        b: 15,
        c: 7
    }
    Ces objets sont rangés dans 3 tableaux (actuellement je limite la table de chaque tableau a 10 éléments l'objectif étant d'augmenter cette limite):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var tab1 = [obj1, obj2, obj3];
    var tab2 = [obj4, obj5, obj6];
    var tab3 = [obj7, obj8, obj9];
    Dans mon algo, il faut que je trouve toutes les combinaisons possible en prenant 2 objets par tableau, puis que je fasse des calculs sur ces objets.
    Actuellement, j'utilise des boucles imbriqués comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    	var i = 0, i0 = 0, i1 = 1, i2 = 0, i3 = 1, i4 = 0, i5 = 1;
    	for (; i0 < tab1.length; i0++) {
    		for (; i1 < tab1.length; i1++) {
    			for (; i2 < tab2.length; i2++) {
    				for (; i3 < tab2.length; i3++) {
    					for (; i4 < tab3.length; i4++) {
    						for (; i5 < tab3.length; i5++) {
    							//function de calcul
    						}
    						i5 = i4+2;
    					}
    					i4 = 0;
    					i5 = 1;
    				}
    				i3 = i2+2;
    				i4 = 0;
    				i5 = 1;
    			}
    			i2 = 0;
    			i3 = 1;
    			i4 = 0;
    			i5 = 1;
    		}
    		i1 = i0+2;
    		i2 = 0;
    		i3 = 1;
    		i4 = 0;
    		i5 = 1;
    	}
    Ca fonctionne bien, mais dès que j'augmente le nombre d'objets par tableau, j'explose la mémoire et surtout le temps d'execution!
    J'utilise des workers pour exectuer la fonction de calcul afin d'améliorer le temps de réponse.
    La mémoire explose aussi car la fonction de calcul va sortir un tableau de résultat qui contient des objets assez conséquent en taille.

    Pour améliorer ca, j'ai donc un serveur node.js et une bdd mysql.

    Si vous avez des idées
    Merci et bonne journée!

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Bonjour !

    Si j’ai bien compris ton problème, il s’agit de prendre, pour chacun des 3 tableaux, les combinaisons de 2 éléments parmi n (n = taille des tableaux), ce qui nous donne 3 ensembles de taille n! / 2(n - 2)!, puis de parcourir le produit cartésien de ces trois ensembles.

    Par exemple, pour n = 3, les ensembles de combinaisons sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    { ab, ac, bc }
    { de, df, ef }
    { gh, gi, hi }
    Et le produit cartésien est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (ab;de;gh), (ab;de;gi), (ab;de;hi),
    (ab;df;gh), (ab;df;gi), (ab;df;hi),
    (ab;ef;gh), (ab;ef;gi), (ab;ef;hi),
     
    (ac;de;gh), (ac;de;gi), (ac;de;hi),
    (ac;df;gh), (ac;df;gi), (ac;df;hi),
    (ac;ef;gh), (ac;ef;gi), (ac;ef;hi),
     
    (bc;de;gh), (bc;de;gi), (bc;de;hi),
    (bc;df;gh), (bc;df;gi), (bc;df;hi),
    (bc;ef;gh), (bc;ef;gi), (bc;ef;hi)
    Soit 27 éléments au total.
    Le nombre d’éléments, et donc le nombre d’opérations à faire, est simplement le nombre de combinaisons élevé au cube : ( n! / 2(n - 2)! )3. Ce nombre croît rapidement avec n :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    n     opérations
    ---   ---
    3     27
    4     216
    5     1 000
    6     3 375
    7     9 261
    …     …
    15    1 157 625
    …     …
    46    1 108 717 875
    …     …
    142   1 003 303 631 331
    J’espère que j’ai mal compris… Sinon il faudra revoir ta conception car, actuellement, le problème est trop complexe pour être calculé en temps raisonnable, peu importe le nombre de workers, peu importe la puissance de la machine, client ou serveur.

Discussions similaires

  1. [XL-2013] Performance de calcul Excel
    Par Rayanea dans le forum Excel
    Réponses: 3
    Dernier message: 30/05/2016, 13h37
  2. Problème de performance de calcul
    Par Zaltymbunk dans le forum Images
    Réponses: 7
    Dernier message: 29/04/2009, 10h49
  3. [MySQL] Performance : calendrier calculé ou en mysql ?
    Par lodan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/05/2007, 20h25
  4. Augmenter les performances de calcul d'Apache
    Par sirbaldur dans le forum Apache
    Réponses: 2
    Dernier message: 20/01/2007, 16h01
  5. Le calcul des stats dégrade les performances
    Par jo007 dans le forum Oracle
    Réponses: 18
    Dernier message: 15/02/2005, 09h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo