optimalizations

This commit is contained in:
Jan Prochazka
2020-05-01 17:50:12 +02:00
parent 7d36ddbc04
commit d0533f3f08
6 changed files with 38 additions and 16 deletions

View File

@@ -1,3 +1,5 @@
import getAsArray from './getAsArray';
let cachedByKey = {};
let cachedPromisesByKey = {};
const cachedKeysByReloadTrigger = {};
@@ -8,22 +10,26 @@ export function cacheGet(key) {
export function cacheSet(key, value, reloadTrigger) {
cachedByKey[key] = value;
if (!(reloadTrigger in cachedKeysByReloadTrigger)) {
cachedKeysByReloadTrigger[reloadTrigger] = [];
for (const item of getAsArray(reloadTrigger)) {
if (!(item in cachedKeysByReloadTrigger)) {
cachedKeysByReloadTrigger[item] = [];
}
cachedKeysByReloadTrigger[item].push(key);
}
cachedKeysByReloadTrigger[reloadTrigger].push(key);
delete cachedPromisesByKey[key];
}
export function cacheClean(reloadTrigger) {
const keys = cachedKeysByReloadTrigger[reloadTrigger];
if (keys) {
for (const key of keys) {
delete cachedByKey[key];
delete cachedPromisesByKey[key];
for (const item of getAsArray(reloadTrigger)) {
const keys = cachedKeysByReloadTrigger[item];
if (keys) {
for (const key of keys) {
delete cachedByKey[key];
delete cachedPromisesByKey[key];
}
}
delete cachedKeysByReloadTrigger[item];
}
delete cachedKeysByReloadTrigger[reloadTrigger];
}
export function getCachedPromise(key, func) {

View File

@@ -0,0 +1,7 @@
import _ from 'lodash';
export default function getAsArray(obj) {
if (_.isArray(obj)) return obj;
if (obj != null) return [obj];
return [];
}

View File

@@ -24,7 +24,7 @@ const connectionInfoLoader = ({ conid }) => ({
const sqlObjectListLoader = ({ conid, database }) => ({
url: 'metadata/list-objects',
params: { conid, database },
reloadTrigger: `database-structure-changed-${conid}-${database}`,
reloadTrigger: [`database-structure-changed-${conid}-${database}`, `database-status-changed-${conid}-${database}`],
});
const databaseListLoader = ({ conid }) => ({

View File

@@ -4,6 +4,7 @@ import axios from './axios';
import useSocket from './SocketProvider';
import stableStringify from 'json-stable-stringify';
import { getCachedPromise, cacheGet, cacheSet } from './cache';
import getAsArray from './getAsArray';
export default function useFetch({
url,
@@ -57,9 +58,13 @@ export default function useFetch({
React.useEffect(() => {
if (reloadTrigger && socket) {
socket.on(reloadTrigger, handleReload);
for (const item of getAsArray(reloadTrigger)) {
socket.on(item, handleReload);
}
return () => {
socket.off(reloadTrigger, handleReload);
for (const item of getAsArray(reloadTrigger)) {
socket.off(item, handleReload);
}
};
}
}, [socket, reloadTrigger]);