Skip to content

web: macOS Safari 下输入框换行/布局变化引发明显卡顿,Chrome 正常 #3509

Description

@Pulck

你运行的 Kimi Code 版本是?

0.40.1

你使用的是哪个开放平台/订阅?

Kimi 官方订阅(通过 /login 登录的 Kimi 账号)

你使用的是哪个模型?

k3(与模型无关,UI 层问题)

你的电脑平台是?

Darwin 25.6.0 arm64(macOS 26.6.2,Apple Silicon),Safari 26.6.2 (21624.5.1.11.3)

你遇到了什么问题?

macOS 上使用 Safari 打开 Kimi Code web 界面时,凡是触发布局变化的操作都会出现明显卡顿,最典型的场景:在底部输入框持续输入文字,每次触发自动换行(输入框高度变化、聊天区位置随之调整)时页面会卡住一拍。同样的操作在 Chrome 中完全流畅。

对发布的 dist-web bundle(0.40.1)做了静态分析,有两个高度可疑的性能问题:

  1. 常驻 backdrop-filter 放大重绘成本。主布局顶栏 .topbar 使用 backdrop-filter: saturate(150%) blur(12px) 覆盖在滚动聊天区之上,菜单为 blur(24px) saturate(1.8)。backdrop-filter 的开销与底层内容变化量成正比:主输入框(ProseMirror contenteditable,高度随内容自然增长)每次换行都会引起滚动区整体 reflow,顶栏模糊层随之重算——这是 WebKit 已知的昂贵路径,Blink 对此的复合优化明显更好。建议对 WebKit 降级为半透明纯色背景。

  2. 多处纯 textarea 的自动增高存在同步布局抖动(注:不涉及主输入框)。侧边聊天面板(SideChatPanel)和审批卡(ApprovalCard)反馈输入框的 resize 逻辑是 style.height="auto" → 读 scrollHeight → 再写 style.height 的 write→read→write 模式,SideChatPanel 将其绑定在 onInput 上,每次按键强制两次全文档同步 reflow。建议改为 rAF 合帧,或先测量后一次性写入。

bundle 中应用层有 Safari UA 嗅探,但仅用于文本断行行为(ProseMirror 库内部另有 Safari composition 的正确性变通),未见性能路径的差异化处理。

复现步骤?

  1. macOS 上用 Safari 打开 Kimi Code web 界面(本地 web 或远程访问链接均可),进入一个有一定长度对话的 session
  2. 在底部输入框持续输入,直到触发自动换行
  3. 每次换行页面明显卡顿;用 Chrome 打开同一地址做对照,无此现象

期望的行为是什么?

Safari 下输入和布局变化应与 Chrome 一样流畅。考虑到远程控制功能的主要目标设备是 iPhone/iPad——iOS/iPadOS 上所有浏览器均为 WebKit 内核,没有替代引擎可选——WebKit 性能实际上是该功能的唯一路径,而非小众兼容性问题。

补充信息

web 源码在 code-app 仓库,以上为对 kimi-code 仓库随附的预构建 bundle(apps/kimi-code/dist-web,0.40.1)的分析,文件名为构建哈希故未附行号,相关模式可直接在 bundle 中检索。如需要我可以提供 Safari Web Inspector 的 Timeline 录制。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions