From 25a5e57cb3edf0f2a0888ddfbe74b34593ef6d4c Mon Sep 17 00:00:00 2001 From: opsx Date: Sat, 31 Oct 2026 18:25:58 +0000 Subject: [PATCH] =?UTF-8?q?perf(logs):=20=E6=9C=AA=E9=80=89=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E7=A9=BA=E9=97=B4=E6=97=B6=E4=B9=9F=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=20app=20=E5=80=99=E9=80=89=EF=BC=8C=E4=B8=8B=E6=8B=89=E4=B8=8D?= =?UTF-8?q?=E5=86=8D"=E7=A9=BA=E7=9A=84=E8=A6=81=E7=AD=89"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原来快捷 LogQL 里 app 候选的逻辑是: if (!namespace) { setApps([]); return } // 没选命名空间就直接空列表 所以用户必须先点命名空间,app 下拉才会出现内容 —— 观感就是"app 下拉加载慢", 其实是被这条早退挡住了,而不是请求慢。 改为:没有命名空间时拉一次**全量** app 候选(不传 selector), 选了命名空间后按 `{namespace="..."}` 收窄。两者共用同一套批量接口与缓存, 不会多打 Loki(全量结果本来就会被缓存 60 秒)。 --- frontend/src/pages/logs/components/QuickQueryTemplates.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/frontend/src/pages/logs/components/QuickQueryTemplates.tsx b/frontend/src/pages/logs/components/QuickQueryTemplates.tsx index 88170bd..68f3541 100644 --- a/frontend/src/pages/logs/components/QuickQueryTemplates.tsx +++ b/frontend/src/pages/logs/components/QuickQueryTemplates.tsx @@ -118,7 +118,7 @@ export function QuickQueryTemplates({ sourceId, query, onQueryChange, onInsert, // 3) 记住本次解析出的 label 名(appLabel),拼 selector / 收窄 pod 都用它, // 否则下拉里显示 79 个、生成的 {app="cex-xxx"} 一条也查不到。 useEffect(() => { - if (!sourceId || !namespace.trim()) { + if (!sourceId) { setApps([]) setAppLabel('app') setAppLoading(false) @@ -126,7 +126,10 @@ export function QuickQueryTemplates({ sourceId, query, onQueryChange, onInsert, } let active = true setAppLoading(true) - const selector = selectorOf({ namespace }) + // 没选命名空间时也拉一次**全量** app 候选: + // 原来这里是"空就直接 return",导致用户必须先点命名空间才能看到 app 列表, + // 观感上就是"app 下拉加载慢/加载不出来"。选了命名空间后再按 namespace 收窄。 + const selector = namespace.trim() ? selectorOf({ namespace }) : '' logsApi .labelValuesBatch(sourceId, ['app', 'service_name', 'container'], selector) .then(result => {