Skip to content

[Bug]: 长会话中向上滚动历史时出现刷新闪烁和短暂空白 #1537

Description

@oceaman

Summary

在长会话中向上滚动查看历史消息时,滚动过程中会出现间歇性刷新闪烁和短暂空白区域,内容需要短暂等待后重新显示。与 #1381 的"强制跳回底部"不同,这个问题表现为滚动路径上的渲染不稳定。

Area

Web UI / Flow Chat / VirtualMessageList

Environment

  • BitFun 版本:0.2.12
  • 操作系统:Windows 11 x64

Reproduction

  1. 在 20+ 轮的长会话中
  2. 使用鼠标滚轮持续向上滚动浏览历史
  3. 观察滚动过程

实际表现

  • 滚动开始后立即出现一次刷新抖动
  • 刷新后可以正常持续滚动一段距离
  • 滚动到某些位置时再次出现刷新或短暂空白区域
  • 空白区域短暂显示后内容重新渲染恢复
  • 以上过程在同一次滚动中可能反复出现

期望表现

滚动全程流畅无刷新、无空白闪烁,虚拟列表增量渲染不应产生用户可见的空白。

#1381 的区别

#1381(已修复) 本 Issue
现象 滚动后自动跳回最底部 滚动过程中刷新闪烁/短暂空白
根因 scroll position 被重置 虚拟列表增量渲染可见延迟
触发 后台事件到达后强制回底 滚动到未渲染区域时 DOM 创建延迟

Likely Cause

VirtualMessageList 的虚拟化机制在你滚动到之前未渲染的 turn 位置时,需要创建新的 DOM 节点。如果 React reconcile 和 DOM commit 之间的间隔稍长,用户会在极短时间内看到空白区域。可能的原因:

  1. item 渲染没有做预渲染/预加载(没有 overscan 或 overscan 不够大)
  2. item 高度计算触发了新一轮 layout,导致闪烁
  3. order_index 重新排序或其他状态更新触发了不必要的 re-render

Suggested Fix

  1. 增大虚拟列表的 overscan 值(预渲染屏幕外 N 个 item)
  2. 为进入 viewport 的 item 加最短渲染保活时间,避免快速滚动时频繁创建/销毁
  3. 检查 item 渲染路径中是否有不必要的状态更新触发了连锁 re-render

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions