mirror of
https://github.com/clash-verge-rev/clash-verge-rev
synced 2025-05-05 08:53:44 +08:00
fix: reduce CPU usage caused by repeated refresh of "Current Proxy" card
This commit is contained in:
parent
98d3a48710
commit
804fad6083
@ -177,9 +177,9 @@ export const CurrentProxyCard = () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查刷新间隔
|
// 检查刷新间隔,强制增加最小间隔
|
||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
if (!force && now - lastRefreshRef.current < 1000) {
|
if (!force && now - lastRefreshRef.current < 1500) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,32 +260,33 @@ export const CurrentProxyCard = () => {
|
|||||||
} finally {
|
} finally {
|
||||||
isRefreshingRef.current = false;
|
isRefreshingRef.current = false;
|
||||||
|
|
||||||
// 处理待处理的刷新请求
|
// 处理待处理的刷新请求,但增加延迟
|
||||||
if (pendingRefreshRef.current) {
|
if (pendingRefreshRef.current) {
|
||||||
pendingRefreshRef.current = false;
|
pendingRefreshRef.current = false;
|
||||||
setTimeout(() => fetchProxyData(), 100);
|
setTimeout(() => fetchProxyData(), 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[isGlobalMode, isDirectMode],
|
[isGlobalMode, isDirectMode],
|
||||||
);
|
);
|
||||||
|
|
||||||
// 响应 currentProxy 变化
|
// 响应 currentProxy 变化,增加时间检查避免循环调用
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (
|
if (
|
||||||
currentProxy &&
|
currentProxy &&
|
||||||
(!state.displayProxy || currentProxy.name !== state.displayProxy.name)
|
(!state.displayProxy ||
|
||||||
|
(currentProxy.name !== state.displayProxy.name &&
|
||||||
|
Date.now() - lastRefreshRef.current > 1000))
|
||||||
) {
|
) {
|
||||||
fetchProxyData(true);
|
fetchProxyData(true);
|
||||||
}
|
}
|
||||||
}, [currentProxy, fetchProxyData, state.displayProxy]);
|
}, [currentProxy, fetchProxyData]);
|
||||||
|
|
||||||
// 监听模式变化,mode变化时刷新
|
// 监听模式变化,mode变化时刷新
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchProxyData(true);
|
fetchProxyData(true);
|
||||||
}, [mode, fetchProxyData]);
|
}, [mode, fetchProxyData]);
|
||||||
|
|
||||||
|
|
||||||
// 计算要显示的代理选项 - 使用 useMemo 优化
|
// 计算要显示的代理选项 - 使用 useMemo 优化
|
||||||
const proxyOptions = useMemo(() => {
|
const proxyOptions = useMemo(() => {
|
||||||
if (isDirectMode) {
|
if (isDirectMode) {
|
||||||
@ -308,11 +309,11 @@ export const CurrentProxyCard = () => {
|
|||||||
return [];
|
return [];
|
||||||
}, [isDirectMode, isGlobalMode, state.proxyData, state.selection.group]);
|
}, [isDirectMode, isGlobalMode, state.proxyData, state.selection.group]);
|
||||||
|
|
||||||
// 使用防抖包装状态更新,避免快速连续更新
|
// 使用防抖包装状态更新,避免快速连续更新,增加防抖时间
|
||||||
const debouncedSetState = useCallback(
|
const debouncedSetState = useCallback(
|
||||||
debounce((updateFn: (prev: ProxyState) => ProxyState) => {
|
debounce((updateFn: (prev: ProxyState) => ProxyState) => {
|
||||||
setState(updateFn);
|
setState(updateFn);
|
||||||
}, 50),
|
}, 300),
|
||||||
[],
|
[],
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -390,11 +391,12 @@ export const CurrentProxyCard = () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 刷新代理信息,使用较短的延迟
|
// 延长刷新延迟时间
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
refreshProxy();
|
refreshProxy();
|
||||||
fetchProxyData(true);
|
// 给refreshProxy一点时间完成,再触发fetchProxyData
|
||||||
}, 200);
|
setTimeout(() => fetchProxyData(true), 300);
|
||||||
|
}, 500);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("更新代理失败", error);
|
console.error("更新代理失败", error);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user