54 lines
4.5 KiB
Python
54 lines
4.5 KiB
Python
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))
|