SuperAPI AI 工具集

perf

编程与开发

查看项目

更新于 10-16 00:32

技能介绍

用途:这是 microsoft/webui 仓库的性能约束技能,用于修改核心 Rust crate、@microsoft/webui-framework 或 @microsoft/webui-router 时,从吞吐(速度)与内存两个维度评估改动。核心原则是服务端内存不廉价、客户端内存不无限,能避免的分配都要避免。

主要能力(Rust):禁止在 writer 输出中用 format!(),改为连续 writer.write();不把 Cow 转 to_string();不对 split 结果 collect::<Vec<_>>();用 first_part.len() == path.len() 代替 contains('.') 避免重复扫描;转义循环不用 String::from(ch),改用 encode_utf8 配合 [u8; 4] 栈缓冲或批量写入;十六进制解析用位运算代替 format!;模板在协议加载时预解析复用;不静默使用 unwrap_or 默认值;冷错误/诊断构造标记 #[cold]/#[inline(never)] 以保持热路径代码布局。内存方面:不克隆大型状态树、HashMap 作用域和只读 String;用 Vec::with_capacity/String::with_capacity 预分配(HTML 输出可参考 4096 字节起步);优先 &str 与切片、必要时用 Cow;用 Arc<T> 与写时复制或快照交换;对不可信输入读取做大小限制防 OOM。

主要能力(TypeScript 客户端):单遍 hydration、按路径索引的定向更新、用 cloneNode 而非 innerHTML、直接事件监听、微任务合并、基于游标的 repeat 协调;<for> 用链表作用域链,模板缓存用 WeakMap 键控,hydration 后移除 SSR 标记,更新热路径避免 filter/map/slice。Router:路由匹配在服务端完成,客户端只做链式 diff;组件按需动态 import;Router.gc() 释放未访问路由模板;用位掩码避免重复下载模板;每次导航只携带最小状态。

使用方式:在改动性能敏感代码时应用上述规则,并用文中命令测量,例如 cargo bench -p microsoft-webui --bench contact_book_bench、cargo xtask bench all、cargo xtask bench node-addon。客户端可监听 webui:hydration-complete 事件并读取 performance measure(名称以 webui:hydrate: 开头)。报告需给出改动前后 P50 延迟与吞吐、可测的分配数变化、输出字节数不变(证明行为正确),内存相关改动附堆快照或 RSS 变化。

适用场景:Rust 核心 crate(webui-handler、webui-state、webui-expressions、webui-parser、webui-protocol、webui-ffi、webui-node)、客户端框架与路由的性能优化及评审。

限制:以上为性能规则与基准方法,具体适用边界、支持平台与许可信息暂未提供。