Skip to content

perf(memory): 长 MEMORY.md 预览改为按行虚拟化,编辑收敛为显式切换 - #1

Open
bqj6666 wants to merge 1 commit into
Sam-Fic:mainfrom
bqj6666:perf/memory-preview-virtualization
Open

bqj6666 wants to merge 1 commit into
Sam-Fic:mainfrom
bqj6666:perf/memory-preview-virtualization

Conversation

@bqj6666

@bqj6666 bqj6666 commented Nov 14, 2026 •

Copy link
Copy Markdown

问题

记忆页把整篇 MEMORY.md 绑在一个 OutlinedTextField(minLines = 6, maxLines = 12) 上。Compose 文本框的排版代价随全文线性增长,几十 KiB 文档在进入页面和每次输入时都要重排整篇。

实测症状:记忆内容为空时不卡,字数一多就非常卡。

改法

  • 新增 MemoryViewMode { Preview, Edit },卡片顶部两个文字按钮显式切换
  • 默认按内容自动选:有内容先预览,空文档直接进编辑,不额外增加一次点击
  • 预览用 LazyColumn 按行拆条虚拟化,只组合视口内的行;外层同为 LazyColumn,按 Compose 约束给 heightIn(max = 320.dp) 明确高度上限
  • 编辑仍用原 TextField,只有用户主动切到编辑时才承担整篇排版成本
  • 文案 memory_view_mode_preview 补齐 en / zh-Hans / zh-Hant

兼容性

编辑、保存、清空、字节计数、超限提示逻辑均未改动。唯一行为差异是默认先展示预览。

验证

  • :app:compileDebugKotlin 通过(release 构建亦通过)
  • 真机验证:长文档(数十 KiB MEMORY.md)进入页面不再卡顿,切到编辑才有整篇排版成本

记忆页把整篇 MEMORY.md 绑在一个 OutlinedTextField(minLines=6, maxLines=12) 上:
Compose 的文本框排版代价随全文线性增长,几十 KiB 文档在进入页面与每次输入时都要
重排整篇。实测表现为「记忆内容为空时不卡,字数一多就非常卡」。

改动:
- 新增 MemoryViewMode { Preview, Edit },卡片顶部两个文字按钮显式切换
- 默认按内容自动选:有内容先预览,空文档直接进编辑,不额外增加点击
- 预览用 LazyColumn 按行拆条虚拟化,只组合视口内的行;外层同为 LazyColumn,
  按 Compose 约束给 heightIn(max) 明确高度上限
- 编辑仍用原 TextField,只有用户主动切到编辑时才承担整篇排版成本
- 文案 memory_view_mode_preview 补齐 en / zh-Hans / zh-Hant

行为差异仅限「默认先看预览」,编辑能力、保存、清空、字节计数与超限提示均未改动。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant