mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-20 14:46:01 +00:00
optimalizations
This commit is contained in:
@@ -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) {
|
||||
|
||||
7
packages/web/src/utility/getAsArray.js
Normal file
7
packages/web/src/utility/getAsArray.js
Normal file
@@ -0,0 +1,7 @@
|
||||
import _ from 'lodash';
|
||||
|
||||
export default function getAsArray(obj) {
|
||||
if (_.isArray(obj)) return obj;
|
||||
if (obj != null) return [obj];
|
||||
return [];
|
||||
}
|
||||
@@ -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 }) => ({
|
||||
|
||||
@@ -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]);
|
||||
|
||||
Reference in New Issue
Block a user