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):
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
4
5 var obj1 = { a: 10, b: 15, c: 7 }
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.
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];
Actuellement, j'utilise des boucles imbriqués comme suit:
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!
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; }
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!
Partager