diff --git a/src-tauri/src/speedtest.rs b/src-tauri/src/speedtest.rs index e5c5b74..4e87747 100644 --- a/src-tauri/src/speedtest.rs +++ b/src-tauri/src/speedtest.rs @@ -65,6 +65,10 @@ pub async fn test_endpoints( } }; + // 先进行一次“热身”请求,忽略其结果,仅用于复用连接/绕过首包惩罚 + let _ = client.get(parsed_url.clone()).send().await; + + // 第二次请求开始计时,并将其作为结果返回 let start = Instant::now(); match client.get(parsed_url).send().await { Ok(resp) => { diff --git a/src/components/ProviderForm/EndpointSpeedTest.tsx b/src/components/ProviderForm/EndpointSpeedTest.tsx index a42e128..aa797b4 100644 --- a/src/components/ProviderForm/EndpointSpeedTest.tsx +++ b/src/components/ProviderForm/EndpointSpeedTest.tsx @@ -324,6 +324,16 @@ const EndpointSpeedTest: React.FC = ({ setIsTesting(true); setLastError(null); + // 清空所有延迟数据,显示 loading 状态 + setEntries((prev) => + prev.map((entry) => ({ + ...entry, + latency: null, + status: undefined, + error: null, + })), + ); + try { const results = await window.api.testApiEndpoints(urls, { timeoutSecs: appType === "codex" ? 12 : 8, @@ -454,7 +464,7 @@ const EndpointSpeedTest: React.FC = ({ type="button" onClick={runSpeedTest} disabled={isTesting || !hasEndpoints} - className="flex h-7 items-center gap-1.5 rounded-md bg-blue-500 px-2.5 text-xs font-medium text-white transition hover:bg-blue-600 disabled:cursor-not-allowed disabled:opacity-40 dark:bg-blue-600 dark:hover:bg-blue-700" + className="flex h-7 w-20 items-center justify-center gap-1.5 rounded-md bg-blue-500 px-2.5 text-xs font-medium text-white transition hover:bg-blue-600 disabled:cursor-not-allowed disabled:opacity-40 dark:bg-blue-600 dark:hover:bg-blue-700" > {isTesting ? ( <> @@ -542,7 +552,15 @@ const EndpointSpeedTest: React.FC = ({
{latency !== null ? (
-
+
{latency}ms