lazy load admin ui data by page

This commit is contained in:
2026-06-29 18:23:04 +08:00
parent 57c7264c7b
commit 8c21691478
+41 -12
View File
@@ -551,11 +551,29 @@ export default function App() {
}
}
async function refreshLiveData() {
async function loadPageData(targetPage: PageKey, { incrementalLogs = true } = {}) {
if (targetPage === "requests") {
await loadRequests();
return;
}
if (targetPage === "profiles") {
await loadProfiles();
return;
}
if (targetPage === "logs") {
await loadLogs(incrementalLogs && latestLogSeq > 0);
}
}
async function refreshLiveData(targetPage: PageKey = page) {
if (restoreRequested || switchingTo) {
return;
}
await Promise.all([loadStatus(false), loadRequests(), loadProfiles(), loadLogs(true)]);
const tasks: Array<Promise<unknown>> = [loadStatus(false)];
if (targetPage !== "overview" && targetPage !== "rules") {
tasks.push(loadPageData(targetPage, { incrementalLogs: true }));
}
await Promise.all(tasks);
}
useEffect(() => {
@@ -580,19 +598,28 @@ export default function App() {
}, []);
useEffect(() => {
Promise.all([loadStatus(true), loadRequests(), loadProfiles(), loadLogs(false)]).catch((error) => {
loadStatus(true).catch((error) => {
setRuleMessage({ text: error?.message || String(error), tone: "error" });
});
}, []);
useEffect(() => {
const timer = window.setInterval(() => {
refreshLiveData().catch((error) => {
setRuleMessage({ text: error?.message || String(error), tone: "error" });
});
}, 2500);
const timer = window.setInterval(() => {
refreshLiveData().catch((error) => {
setRuleMessage({ text: error?.message || String(error), tone: "error" });
});
}, 2500);
return () => window.clearInterval(timer);
});
}, [page, requestQuery, requestFilter, latestLogSeq, restoreRequested, switchingTo]);
useEffect(() => {
if (page === "overview" || page === "rules") {
return;
}
loadPageData(page, { incrementalLogs: false }).catch((error) => {
setRuleMessage({ text: error?.message || String(error), tone: "error" });
});
}, [page]);
useEffect(() => {
if (page !== "profiles" || !shouldSyncProfileFormToActive) {
@@ -631,7 +658,6 @@ export default function App() {
});
setStatus(payload);
setRuleForm(ruleFormFromStatus(payload));
await Promise.all([loadRequests(), loadLogs(false)]);
setRuleMessage({ text: "配置已保存,并已对当前 gateway 立即生效。", tone: "success" });
} catch (error) {
setRuleMessage({ text: error instanceof Error ? error.message : String(error), tone: "error" });
@@ -639,13 +665,16 @@ export default function App() {
}
useEffect(() => {
if (page !== "requests") {
return;
}
const timer = window.setTimeout(() => {
loadRequests().catch((error) => {
setRuleMessage({ text: error?.message || String(error), tone: "error" });
});
}, 180);
return () => window.clearTimeout(timer);
}, [requestQuery, requestFilter]);
}, [page, requestQuery, requestFilter]);
async function saveProfile(event: FormEvent) {
event.preventDefault();
@@ -780,7 +809,7 @@ export default function App() {
if (payload.config?.profile_name === profileName) {
setSwitchingTo("");
setShouldSyncProfileFormToActive(true);
Promise.all([loadStatus(true), loadRequests(), loadProfiles(), loadLogs(false)]).catch(() => {});
Promise.all([loadStatus(true), loadProfiles()]).catch(() => {});
return;
}
} catch {