Bonjour,
j'en appel aux gouroux du JS...
j'essaye de deleguer (via un webWorker) un calcul D3 (https://d3js.org/ pour ceux qui ne connaissent pas). le calcul en soit se passe bien, le probleme est qu'il me genere un tableau d'objects. ces objets sont des MultiPolygon qui contiennent les coordonnes de millions de points (qui permettent de colorer des zones) voici a quoi ca ressemble :
=> le renvoyer au main thread prend ~500ms ce qui me genere des warnings d'execution time, et plus genant : ca fait ramer la page
Code javascript : 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 [ { coordinates: [ [x,y], [x,],// etc ... des milliers de fois ], type: "MultiPolygon", value: 0 }, { coordinates: [ [x,y], [x,],// etc ... des millions de fois ], type: "MultiPolygon", value: 10 }, etc... ]
de plus, ayant plusieurs workers en parallele, j'ai l'impression que des que le 1er worker commence a "renvoyer sa donnee au main thread", celui-ci est "bloque le temps de la copie de l'object", ce qui retarde encore plus les suivants
voici mon code :je n'arrive pas a le passer dans le param de transfer developer.mozilla.org/en-US/docs/Glossary/Transferable_objects car il faudrait le convertir "object transferable"
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 function generateCoor(params) { const {datas} = params; const contours = d3.contours().size([256, 256]); const cntrs = contours.thresholds(20)(datas.data); console.log(cntrs); postMessage({action:'generateCoor', datas:cntrs}); // postMessage({action:'generateCoor', datas:cntrs}, [cntrs.buffer]); // idealement, ce que j'essaye de faire }
et je ne sais pas comment faire ca :/
merci d'avance a ceux qui ont le temps de se pencher sur mon probleme
Partager