Prhub

#27068 [diffusion] Polish realtime WebUI waiting state

原始 PR 作者 mickqian 合并时间 2026-06-03 14:29 文件变更 4 提交数 3 评论 1 代码增减 +23 / -61

执行摘要

优化实时预览等待状态,用旋转圆环替代点脉冲动画

PR body 指出需要简化实时预览的空闲状态绘制,并改进等待状态的视觉反馈,避免不必要的 Canvas 装饰绘制,使 UI 更加清爽一致。

对于关注实时 WebUI 开发的工程师,可以了解其测试同步方法;对于其他开发者,此 PR 价值不大,无需精读。

讨论亮点

本 PR 无任何 review 评论,由作者直接合并。

实现拆解

  1. 简化空闲绘制app.jsdrawIdle 函数):移除渐变、边框和三点占位的 Canvas 绘图,仅保留纯色背景填充,减少不必要的渲染。
  2. 替换等待指示器动画styles.css):将原有的三点脉冲动画(previewDotPulse)改为旋转单环动画(previewProgressSpin),通过 border-top-color 和旋转动画实现。
  3. 对齐工具栏状态文本styles.css):调整 .topbar > *.preview-scale-control p#statusText#chunkText.stage-statline-heightalign-items,确保文本垂直居中。
  4. 更新资源缓存版本号和测试断言index.htmltest_realtime_webui.py):在 index.html 中将样式表和脚本的查询字符串从 v37 增加到 v38;在测试中添加对 previewProgressSpin 存在的断言和 previewDotPulse 不存在的断言,同时更新版本号字符串断言。
文件 模块 状态 重要度
python/sglang/multimodal_gen/apps/realtime_webui/app.js WebUI modified 6.22
python/sglang/multimodal_gen/apps/realtime_webui/styles.css WebUI modified 4.08
python/sglang/multimodal_gen/test/unit/realtime/test_realtime_webui.py WebUI 测试 modified 3.95
python/sglang/multimodal_gen/apps/realtime_webui/index.html WebUI modified 2.32

关键符号

drawIdle

关键源码片段

python/sglang/multimodal_gen/apps/realtime_webui/app.js core-logic

核心逻辑文件:移除了 drawIdle 中的装饰性绘制(渐变、边框、三点占位),只保留纯色填充,大幅简化空闲状态渲染。

function drawIdle() {
  const w = 1280, h = 720;
  // 确保 Canvas 尺寸为 1280x720,如果不符合则调整
  if (canvas.width !== w || canvas.height !== h) {
    canvas.width = w;
    canvas.height = h;
  }
  setPreviewState("idle"); // 更新预览状态为 idle
  renderedPreviewFrames = 0; // 重置渲染帧计数
  ctx.fillStyle = "#11140f"; // 固定深色背景,不再绘制装饰渐变、边框和占位点
  ctx.fillRect(0, 0, w, h);
}
python/sglang/multimodal_gen/apps/realtime_webui/styles.css core-logic

样式文件:将等待指示器从三点脉冲动画改为旋转圆环动画,并调整工具栏状态文本行高以对齐。

/* 原先的三点脉冲动画已被移除,现替换为旋转进度环 */
.preview-loader {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 2px solid rgba(238, 241, 236, 0.22); /* 浅色边框 */
  border-top-color: rgba(238, 241, 236, 0.82); /* 顶部颜色较亮,造成旋转效果 */
  animation: previewProgressSpin 0.8s linear infinite; /* 匀速旋转动画 */
}@keyframes previewProgressSpin {
  to {
    transform: rotate(360deg);
  }
}

(其他辅助变更:调整 .topbar > *.preview-scale-control p#statusText#chunkText.stage-statline-height: 1align-items: center 以改善垂直对齐。)

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低,变更仅涉及前端 UI 展示和测试断言,不影响任何后端推理逻辑或 API 行为。CSS 动画替换是视觉等价,空闲绘制简化仅减少装饰,不会导致功能缺失。版本号更新确保客户端能获取最新资源,但若缓存硬编码在其他地方可能需要同步更新。测试断言更新确保了前端代码与测试同步,降低疏忽风险。

直接影响使用 sglang-diffusion Realtime WebUI 的用户,带来更简洁的空闲界面和更现代的加载提示。对系统性能无影响(空闲绘制减少甚至轻微提升)。对团队而言,测试覆盖了新的 CSS 类,未来修改需要同步断言。整体影响范围小,程度低。

UI 视觉变更 缓存版本号依赖 测试覆盖同步

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论