错误: 由于重复的 DOM 序列化、浏览器状态获取和日益增长的消息历史记录,长时间运行代理任务时性能会下降
作者: benjamin920102创建于 2026年9月9日更新于 2026年9月10日
标签bug
- 全部 DOM 序列化每个步骤 当前行为: DOM 树 | v 遍历所有节点 | v 序列化所有元素 复杂性: O(N) 其中: N = 总 DOM 节点数 问题:即使只有少数节点发生变化,整个 DOM 也会再次被处理。 示例: DOM 大小: 50,000 个节点 变更节点: 20 个 当前工作: 50,000 个节点处理操作 预期: 20 个节点更新 建议改进: 使用浏览器变化跟踪实现增量 DOM 差异检测。 预期复杂性改进: O(N) -> O(K) K = 变更节点 2. 消息历史持续增长 当前行为: messages = [ step1, step2, step3, …, stepN ] 长时间任务会创建: 更大的提示 更高的令牌使用率 更多内存分配 更长的序列化时间 当前复杂性: O(N) 建议改进: 使用最近的重要消息 + 压缩摘要 + 当前浏览器状态 预期: O(W) W = 固定上下文窗口 3. 重复获取浏览器状态 当前行为:每个步骤可能多次请求: get_page() get_dom() get_attributes() get_visibility() 即使浏览器状态没有变化。 建议改进:添加浏览器状态缓存: BrowserStateCache - DOM 快照 - 当前页面 - 视口 - 时间戳 仅在以下情况下才会失效: 导航 单击 输入 DOM 变化 4. DOM 序列化器分配开销 当前实现创建了许多临时对象: 字典 列表 字符串 中间表示 尽管复杂性仍然为 O(N) 但由于: Python 内存分配 垃圾收集 字符串复制 固定开销很高 建议改进: 对象重用 基于生成器的处理 减少临时分配 提高字符串构建
内容来源: browser-use/browser-use