from pathlib import Path import json,hashlib,ast folder=Path(__file__).resolve().parent;target=Path('C:/wechat_rpa');payload=folder/'payload' for root in [payload,target]: p=root/'assets/ui/zhenyang-ai-console.html';s=p.read_text(encoding='utf-8') s=s.replace('console-app.js?v=dpi1','console-app.js?v=perf1').replace('console-responsive.css?v=dpi1','console-responsive.css?v=perf1') p.write_text(s,encoding='utf-8',newline='\n') report=json.loads((folder/'qa/after.json').read_text(encoding='utf-8')) layout=json.loads((folder/'qa/results.json').read_text(encoding='utf-8')) assert len(report['results'])==11 and all(r['passed'] for r in report['results']) and not report['errors'] assert len(layout['results'])==56 and not layout['errors'] and all(r['contentWidth']<=r['mainWidth']+2 for r in layout['results']) record=json.loads((folder/'applied.json').read_text()) sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest() for row in record['manifest']: path=target/row['path'];assert sha(path)==sha(payload/row['path']),row['path'] if path.suffix=='.py':ast.parse(path.read_text(encoding='utf-8')) row['sha256']=sha(path) record.update(tests_passed=145,browser_interactions=report['results'],layout_checks=56, artifacts=str(folder),installer_rebuilt=False) (target/'UI_PERFORMANCE_MANIFEST_20260916.json').write_text(json.dumps(record,ensure_ascii=False,indent=2),encoding='utf-8') (folder/'final.json').write_text(json.dumps(record,ensure_ascii=False,indent=2),encoding='utf-8') doc=r'''# 切页和编辑流畅性修复(2026-09-16) ## 本次调整 - 状态快照只收集当前页面的数据。编辑 AI、自动化或系统设置时,不再遍历队列、归档、聊天和日志,也不读取其他页面配置。 - 快速连续点击菜单先显示目标页面,再合并后台导航,只执行最后一次导航。等待新页面状态期间忽略上一页的迟到快照,避免页面回跳。 - 取消隐藏旧界面的切换动画。列表中不可见的行延后绘制,图标替换从多轮字符串扫描改为单轮。 - 日志/状态队列每轮最多处理 64 条,按 8 毫秒预算让出主线程,后续帧继续,保留事件顺序。单条操作不是强制中断,预算只在相邻条目之间检查。 - 搜索、自动化设置、系统设置分别防抖。保存参数在输入时立即取快照;切页时提交该快照,不再从已切换的页面读取旧值。 - 手动保存消费尚未执行的自动保存;缩放下拉框只提交一次。修改自动化数字时,上下文轮数未变化就不重复保存整套 AI 配置。 - 未保存的输入保留为当前客户端页面草稿,切页回来继续编辑;后台确认同一值后释放草稿,后续云端修改仍正常显示。退出或重新加载客户端不保留未保存草稿。 - 中文输入法组合期间不触发搜索或替换编辑区;搜索完成后更新结果,保留同一个搜索输入框和光标。 - 切页保存各页滚动位置,避免后台更新后跳回顶部。系统缩放继续使用前一版的 DPI 适配。 ## 验证结果 145 项 Python/Qt 回归通过,覆盖按页数据依赖、日志突发处理、单次保存、显示缩放、控制台、胶囊、协议回复和知识联动。最终搜索焦点改动另复跑 36 项 Qt 桥接测试通过(包含在上述范围内,不重复计数)。 11 项浏览器交互检查通过:草稿保留、快速切页合并、迟到快照过滤、正确值保存、去重保存、中文输入、100 次后台刷新保持输入节点与选区、保存后接收云端修改、搜索更新保留光标。 8 页 × 7 种显示条件共 56 组布局检查通过,无横向溢出和页面脚本异常。所有交互测试使用模拟数据和模拟桥接,没有发送真实客服消息。 合成文本图标替换基准:旧版中位数约 15.3 ms,新版约 8.5 ms;该数值只代表本机的字符串处理测试,不代表所有机器的界面帧率。500 条模拟归档的单次页面构建约 8.9 ms,滚动绘制延后进行。 ## 使用和回退 退出并重新运行 `C:\wechat_rpa` 中的源码客户端,才会加载新界面。本次没有重新打包已有 EXE/安装包,旧 EXE 不会自动使用这些源码。 备份:`backups/ui-performance-20260916`。完整改动哈希和测试清单:`UI_PERFORMANCE_MANIFEST_20260916.json`。 ''' (target/'UI_PERFORMANCE_20260916.md').write_text(doc,encoding='utf-8',newline='\n') print(json.dumps({'files':len(record['manifest']),'tests':145,'interaction_checks':11,'layout_checks':56,'backup':record['backup']},ensure_ascii=False))