mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-29 16:53:58 +00:00
optimalizations
This commit is contained in:
@@ -30,7 +30,6 @@ module.exports = {
|
|||||||
if (!existing) return;
|
if (!existing) return;
|
||||||
existing.status = status;
|
existing.status = status;
|
||||||
socket.emitChanged(`database-status-changed-${conid}-${database}`);
|
socket.emitChanged(`database-status-changed-${conid}-${database}`);
|
||||||
socket.emitChanged(`database-structure-changed-${conid}-${database}`);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
handle_ping() {},
|
handle_ping() {},
|
||||||
@@ -117,7 +116,6 @@ module.exports = {
|
|||||||
structure: existing.structure,
|
structure: existing.structure,
|
||||||
};
|
};
|
||||||
socket.emitChanged(`database-status-changed-${conid}-${database}`);
|
socket.emitChanged(`database-status-changed-${conid}-${database}`);
|
||||||
socket.emitChanged(`database-structure-changed-${conid}-${database}`);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -42,10 +42,16 @@ async function handleConnect({ connection, structure }) {
|
|||||||
storedConnection = connection;
|
storedConnection = connection;
|
||||||
lastPing = new Date().getTime();
|
lastPing = new Date().getTime();
|
||||||
|
|
||||||
setStatusName('pending');
|
if (!structure) setStatusName('pending');
|
||||||
|
else setStatusName('ok');
|
||||||
const driver = engines(storedConnection);
|
const driver = engines(storedConnection);
|
||||||
systemConnection = await driverConnect(driver, storedConnection);
|
systemConnection = await driverConnect(driver, storedConnection);
|
||||||
handleFullRefresh();
|
if (structure) {
|
||||||
|
analysedStructure = structure;
|
||||||
|
handleIncrementalRefresh();
|
||||||
|
} else {
|
||||||
|
handleFullRefresh();
|
||||||
|
}
|
||||||
setInterval(handleIncrementalRefresh, 30 * 1000);
|
setInterval(handleIncrementalRefresh, 30 * 1000);
|
||||||
for (const [resolve] of afterConnectCallbacks) {
|
for (const [resolve] of afterConnectCallbacks) {
|
||||||
resolve();
|
resolve();
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import getAsArray from './getAsArray';
|
||||||
|
|
||||||
let cachedByKey = {};
|
let cachedByKey = {};
|
||||||
let cachedPromisesByKey = {};
|
let cachedPromisesByKey = {};
|
||||||
const cachedKeysByReloadTrigger = {};
|
const cachedKeysByReloadTrigger = {};
|
||||||
@@ -8,22 +10,26 @@ export function cacheGet(key) {
|
|||||||
|
|
||||||
export function cacheSet(key, value, reloadTrigger) {
|
export function cacheSet(key, value, reloadTrigger) {
|
||||||
cachedByKey[key] = value;
|
cachedByKey[key] = value;
|
||||||
if (!(reloadTrigger in cachedKeysByReloadTrigger)) {
|
for (const item of getAsArray(reloadTrigger)) {
|
||||||
cachedKeysByReloadTrigger[reloadTrigger] = [];
|
if (!(item in cachedKeysByReloadTrigger)) {
|
||||||
|
cachedKeysByReloadTrigger[item] = [];
|
||||||
|
}
|
||||||
|
cachedKeysByReloadTrigger[item].push(key);
|
||||||
}
|
}
|
||||||
cachedKeysByReloadTrigger[reloadTrigger].push(key);
|
|
||||||
delete cachedPromisesByKey[key];
|
delete cachedPromisesByKey[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function cacheClean(reloadTrigger) {
|
export function cacheClean(reloadTrigger) {
|
||||||
const keys = cachedKeysByReloadTrigger[reloadTrigger];
|
for (const item of getAsArray(reloadTrigger)) {
|
||||||
if (keys) {
|
const keys = cachedKeysByReloadTrigger[item];
|
||||||
for (const key of keys) {
|
if (keys) {
|
||||||
delete cachedByKey[key];
|
for (const key of keys) {
|
||||||
delete cachedPromisesByKey[key];
|
delete cachedByKey[key];
|
||||||
|
delete cachedPromisesByKey[key];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
delete cachedKeysByReloadTrigger[item];
|
||||||
}
|
}
|
||||||
delete cachedKeysByReloadTrigger[reloadTrigger];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getCachedPromise(key, func) {
|
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 }) => ({
|
const sqlObjectListLoader = ({ conid, database }) => ({
|
||||||
url: 'metadata/list-objects',
|
url: 'metadata/list-objects',
|
||||||
params: { conid, database },
|
params: { conid, database },
|
||||||
reloadTrigger: `database-structure-changed-${conid}-${database}`,
|
reloadTrigger: [`database-structure-changed-${conid}-${database}`, `database-status-changed-${conid}-${database}`],
|
||||||
});
|
});
|
||||||
|
|
||||||
const databaseListLoader = ({ conid }) => ({
|
const databaseListLoader = ({ conid }) => ({
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import axios from './axios';
|
|||||||
import useSocket from './SocketProvider';
|
import useSocket from './SocketProvider';
|
||||||
import stableStringify from 'json-stable-stringify';
|
import stableStringify from 'json-stable-stringify';
|
||||||
import { getCachedPromise, cacheGet, cacheSet } from './cache';
|
import { getCachedPromise, cacheGet, cacheSet } from './cache';
|
||||||
|
import getAsArray from './getAsArray';
|
||||||
|
|
||||||
export default function useFetch({
|
export default function useFetch({
|
||||||
url,
|
url,
|
||||||
@@ -57,9 +58,13 @@ export default function useFetch({
|
|||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
if (reloadTrigger && socket) {
|
if (reloadTrigger && socket) {
|
||||||
socket.on(reloadTrigger, handleReload);
|
for (const item of getAsArray(reloadTrigger)) {
|
||||||
|
socket.on(item, handleReload);
|
||||||
|
}
|
||||||
return () => {
|
return () => {
|
||||||
socket.off(reloadTrigger, handleReload);
|
for (const item of getAsArray(reloadTrigger)) {
|
||||||
|
socket.off(item, handleReload);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}, [socket, reloadTrigger]);
|
}, [socket, reloadTrigger]);
|
||||||
|
|||||||
Reference in New Issue
Block a user