refactor: add debounce to optimize config updates and provider refresh handling

This commit is contained in:
wonfen
2025-05-25 21:34:48 +08:00
parent d3dbc11b1b
commit af1689ee07
7 changed files with 207 additions and 21 deletions

View File

@@ -170,6 +170,8 @@ const Layout = () => {
// 设置监听器
useEffect(() => {
let providersDebounceTimer: ReturnType<typeof setTimeout> | undefined;
const listeners = [
addListener("verge://refresh-clash-config", async () => {
await getAxios(true);
@@ -185,6 +187,18 @@ const Layout = () => {
mutate("getAutotemProxy");
}),
addListener("verge://refresh-providers-proxies", () => {
if (providersDebounceTimer) {
clearTimeout(providersDebounceTimer);
}
providersDebounceTimer = setTimeout(() => {
console.log('[Layout] Debounced refresh-providers-proxies event');
mutate("getProxyProviders");
providersDebounceTimer = undefined;
}, 500);
}),
addListener("verge://notice-message", ({ payload }) =>
handleNotice(payload as [string, string]),
),
@@ -206,6 +220,10 @@ const Layout = () => {
const cleanupWindow = setupWindowListeners();
return () => {
if (providersDebounceTimer) {
clearTimeout(providersDebounceTimer);
}
listeners.forEach((listener) => {
if (typeof listener.then === "function") {
listener.then((unlisten) => unlisten());