From 0cc6785d0198f45670b26a1f03b5b472d0d838bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=95=E6=9F=8F=E9=9D=92?= Date: Mon, 15 Jun 2026 22:15:07 +0800 Subject: [PATCH] =?UTF-8?q?perf(marketplace,localasr):=20=E6=B8=85?= =?UTF-8?q?=E7=90=86=E5=86=97=E4=BD=99=E5=AE=9A=E6=97=B6=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit issue #470: - Marketplace 上传后双重 setTimeout(1.5s+5s) 去重为单次 5s——乐观更新已即时反映「我的 发布」,延时刷新仅做服务端状态校准,1.5s 那次纯冗余。 - LocalAsr scheduleScrollGuardRestore 三连 setTimeout(0/80/200ms) 仅删等价的 0ms 那枪 (已被紧随的 rAF 覆盖),保留 80/200ms 兜住 rAF 之后的异步重排,避免滚动跳变回归。 --- openless-all/app/src/pages/LocalAsr.tsx | 3 ++- openless-all/app/src/pages/Marketplace.tsx | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/openless-all/app/src/pages/LocalAsr.tsx b/openless-all/app/src/pages/LocalAsr.tsx index 5c5624a8..ea675927 100644 --- a/openless-all/app/src/pages/LocalAsr.tsx +++ b/openless-all/app/src/pages/LocalAsr.tsx @@ -201,7 +201,8 @@ export function LocalAsr({ embedded = false }: LocalAsrProps = {}) { } const scheduleScrollGuardRestore = () => { - window.setTimeout(restoreScrollGuard, 0) + // issue #470:立即帧由下面的 rAF + 嵌套 rAF 覆盖(≈0~32ms),故移除等价的 setTimeout(…,0); + // 80ms / 200ms 两枪保留,用于兜住 rAF 之后才发生的异步重排(如图片晚加载)。 window.setTimeout(restoreScrollGuard, 80) window.setTimeout(restoreScrollGuard, 200) window.requestAnimationFrame(() => { diff --git a/openless-all/app/src/pages/Marketplace.tsx b/openless-all/app/src/pages/Marketplace.tsx index 398e2b64..3c3a9609 100644 --- a/openless-all/app/src/pages/Marketplace.tsx +++ b/openless-all/app/src/pages/Marketplace.tsx @@ -386,8 +386,9 @@ export function Marketplace() { setUploadOriginPackId(null); setUploadTargetName(null); setSelectedUploadPackId(null); - // 后续 polling 用服务端真实数据校准(审核状态可能 pending→approved/rejected)。 - window.setTimeout(() => { void refresh(); void refreshMyPacks(); }, 1500); + // issue #470:上传后给后端一点时间落库 + 跑审核,再用服务端真实数据校准一次 + // (审核状态可能 pending→approved/rejected)。乐观更新已即时反映「我的发布」, + // 这里只需单次兜底刷新;取较长延时(5s)确保后端最终一致后能查到,去掉冗余的 1.5s 那次。 window.setTimeout(() => { void refresh(); void refreshMyPacks(); }, 5000); } catch (error) { setActionMsg({ kind: 'err', text: t('marketplace.errors.upload', { err: errorMessage(error) }) });