Skip to content

Commit 43f0e1a

Browse files
committed
Memoize more in AllPerformanceGraph
Affects issues: - Possibly fixed #4490
1 parent 79467fb commit 43f0e1a

File tree

2 files changed

+29
-21
lines changed

2 files changed

+29
-21
lines changed

Plan/react/dashboard/src/components/cards/server/graphs/PerformanceGraphsCard.jsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {useTranslation} from "react-i18next";
66
import {Card} from "react-bootstrap";
77
import CardTabs from "../../../CardTabs";
88
import {faGears, faHdd, faMap, faMicrochip, faSignal, faTachometerAlt} from "@fortawesome/free-solid-svg-icons";
9-
import React, {useEffect, useState} from "react";
9+
import React, {useEffect, useMemo, useState} from "react";
1010
import {ChartLoader} from "../../../navigation/Loader";
1111
import AllPerformanceGraph from "../../../graphs/performance/AllPerformanceGraph";
1212
import TpsPerformanceGraph from "../../../graphs/performance/TpsPerformanceGraph";
@@ -77,14 +77,13 @@ const PerformanceGraphsCard = () => {
7777
data: pluginHistory,
7878
loadingError: pluginHistoryLoadingError
7979
} = useDataRequest(fetchPluginHistory, [identifier], authRequired && hasPermission('page.server.plugin.history'));
80-
const [pluginHistorySeries, setPluginHistorySeries] = useState(undefined);
8180

8281
useEffect(() => {
8382
if (data) {
8483
mapPerformanceDataToSeries(data.values).then(parsed => setParsedData(parsed))
8584
}
8685
}, [data, setParsedData]);
87-
useEffect(() => {
86+
const pluginHistorySeries = useMemo(() => {
8887
// https://stackoverflow.com/a/34890276/20825073
8988
const groupBy = function (xs, key) {
9089
return xs.reduce(function (rv, x) {
@@ -95,7 +94,7 @@ const PerformanceGraphsCard = () => {
9594

9695
if (pluginHistory) {
9796
const grouped = groupBy(pluginHistory.history.reverse(), 'modified');
98-
setPluginHistorySeries({
97+
return {
9998
type: 'flags',
10099
accessibility: {
101100
exposeAsGroupOnly: true,
@@ -113,9 +112,9 @@ const PerformanceGraphsCard = () => {
113112
(uninstalledLines.length ? '<br><b>' + t('html.label.uninstalled') + '</b><br>' + uninstalledLines : '')
114113
}
115114
})
116-
})
115+
};
117116
}
118-
}, [pluginHistory, setPluginHistorySeries, t]);
117+
}, [pluginHistory, t]);
119118

120119
const tabs = [
121120
{

Plan/react/dashboard/src/components/graphs/performance/AllPerformanceGraph.jsx

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, {useCallback, useEffect, useState} from 'react';
1+
import React, {useCallback, useEffect, useMemo, useState} from 'react';
22

33
import {hasValuesInSeries, tooltip, translateLinegraphButtons} from "../../../util/graphs";
44
import Highcharts from "highcharts/esm/highstock";
@@ -9,7 +9,7 @@ import {useTheme} from "../../../hooks/themeHook";
99
import {useMetadata} from "../../../hooks/metadataHook";
1010
import {useAuth} from "../../../hooks/authenticationHook.tsx";
1111
import {useGraphExtremesContext} from "../../../hooks/interaction/graphExtremesContextHook.jsx";
12-
import {localeService} from "../../../service/localeService.js";
12+
import {useI18nFriendlyLanguage} from "../../../service/localeService.js";
1313
import {usePingFormatter} from "../../../util/format/usePingFormatter.js";
1414

1515
const AllPerformanceGraph = ({id, data, dataSeries, pluginHistorySeries}) => {
@@ -18,10 +18,11 @@ const AllPerformanceGraph = ({id, data, dataSeries, pluginHistorySeries}) => {
1818
const {timeZoneOffsetMinutes} = useMetadata();
1919
const {hasPermission} = useAuth();
2020
const {extremes, onSetExtremes} = useGraphExtremesContext();
21-
const [graph, setGraph] = useState(undefined);
2221
const {formatPing} = usePingFormatter();
2322

24-
const yAxis = [
23+
const [graph, setGraph] = useState(undefined);
24+
25+
const yAxis = useMemo(() => [
2526
{
2627
labels: {
2728
formatter: function () {
@@ -81,7 +82,7 @@ const AllPerformanceGraph = ({id, data, dataSeries, pluginHistorySeries}) => {
8182
softMin: 0,
8283
softMax: 50
8384
},
84-
]
85+
], [formatPing]);
8586

8687
const onResize = useCallback(() => {
8788
let chartElement = document.getElementById(id);
@@ -107,7 +108,7 @@ const AllPerformanceGraph = ({id, data, dataSeries, pluginHistorySeries}) => {
107108
}
108109
}, [onResize])
109110

110-
useEffect(() => {
111+
const chart = useMemo(() => {
111112
const zones = {
112113
tps: [{
113114
value: data.zones.tpsThresholdMed,
@@ -183,14 +184,7 @@ const AllPerformanceGraph = ({id, data, dataSeries, pluginHistorySeries}) => {
183184
} : undefined
184185
};
185186

186-
Highcharts.setOptions({
187-
lang: {
188-
locale: localeService.getIntlFriendlyLocale(),
189-
noData: t('html.label.noDataToDisplay')
190-
}
191-
})
192-
Highcharts.setOptions(graphTheming);
193-
setGraph(Highcharts.stockChart(id, {
187+
return {
194188
chart: {
195189
noData: t('html.label.noDataToDisplay')
196190
},
@@ -219,7 +213,22 @@ const AllPerformanceGraph = ({id, data, dataSeries, pluginHistorySeries}) => {
219213
timezoneOffset: timeZoneOffsetMinutes
220214
},
221215
series: [series.playersOnline, series.tps, series.mspt, series.cpu, series.ram, series.entities, series.chunks, pluginHistorySeries].filter(s => s)
222-
}));
216+
}
217+
}, [data, dataSeries, pluginHistorySeries, hasPermission, t, onSetExtremes, timeZoneOffsetMinutes, nightModeEnabled]);
218+
219+
const locale = useI18nFriendlyLanguage();
220+
useEffect(() => {
221+
Highcharts.setOptions({
222+
lang: {
223+
locale: locale,
224+
noData: t('html.label.noDataToDisplay')
225+
}
226+
})
227+
}, [locale]);
228+
229+
useEffect(() => {
230+
Highcharts.setOptions(graphTheming);
231+
setGraph(Highcharts.stockChart(id, chart));
223232
}, [data, dataSeries, graphTheming, nightModeEnabled, id, t, timeZoneOffsetMinutes, pluginHistorySeries])
224233
useEffect(() => {
225234
if (graph?.xAxis?.length && extremes) {

0 commit comments

Comments
 (0)