From 3d6bb88556441860877d3e7befe10c2727423026 Mon Sep 17 00:00:00 2001 From: Severiano Badajoz Date: Mon, 15 Jul 2019 16:00:23 -0700 Subject: [PATCH] improve performance around category highlighting (#849) * remove function call and add comment * separate crossfilter size calc into memoized function --- client/src/components/graph/graph.js | 17 +++++++++++++++-- client/src/reducers/centroidLabel.js | 4 ++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/client/src/components/graph/graph.js b/client/src/components/graph/graph.js index b5959a28..09cadd13 100644 --- a/client/src/components/graph/graph.js +++ b/client/src/components/graph/graph.js @@ -52,16 +52,27 @@ class Graph extends React.Component { return colors; }); + computePointSizesFromCrossfilter = memoize((len, crossfilter) => { + const sizes = new Float32Array(len); + crossfilter.fillByIsSelected(sizes, 4, 0.2); + + return sizes; + }); + computePointSizes = memoize( (len, crossfilter, metadataField, categoryField) => { /* compute webgl dot size for each point */ - const sizes = new Float32Array(len); - crossfilter.fillByIsSelected(sizes, 4, 0.2); + const selectionSizes = this.computePointSizesFromCrossfilter( + len, + crossfilter + ); + let sizes; if (metadataField && categoryField) { + sizes = selectionSizes.slice(); const valuesArr = crossfilter.data.col(metadataField).asArray(); for (let i = 0; i < len; i += 1) { @@ -69,6 +80,8 @@ class Graph extends React.Component { sizes[i] = 10; } } + } else { + sizes = selectionSizes; } return sizes; } diff --git a/client/src/reducers/centroidLabel.js b/client/src/reducers/centroidLabel.js index 5582e5cc..c1060fb6 100644 --- a/client/src/reducers/centroidLabel.js +++ b/client/src/reducers/centroidLabel.js @@ -19,12 +19,12 @@ const CentroidLabel = (state = initialState, action, sharedNextState) => { metadataField, categoryIndex, categoryField, - centroidXY: calcCentroid( + centroidXY: null /* calcCentroid( This function call is computationally heavy and also leading to large GC. Before reimplementation, look into optimization and memoization world, metadataField, categoryField, layoutChoice.currentDimNames - ) + ) */ }; case "category value mouse hover end":