用途:这是面向 Motoko 语言的通用性能优化指南,目标是在不改变程序语义的前提下,安全、可预测地提升吞吐与降低延迟。适用于编码器/解码器、哈希、二进制解析等热路径循环,以及需要减少分配、优化位运算和文本构建的场景。
主要能力:
- 减少热路径分配:避免为遍历而把 Blob 转成 [Nat8],直接索引 Blob;缓存 size() 到局部变量。
- 定宽算术:在 Nat32/Nat64 中间值上做移位与掩码,避免在循环中加宽到任意精度 Nat;用 b.toNat16().toNat32() 分阶段加宽。
- 高效构建 Text:避免逐字符 Text.fromChar 加大量 # 拼接,改为每次构建 4–8 字节 ASCII Blob,用 Text.decodeUtf8 一次解码后整体追加。
- 循环形状优化:主循环处理整齐块,尾部少量字节单独处理,把不变式提到循环外。
- 逐次验证:每次改动后重建、跑单元测试/属性检查,再用代表性输入做基准测试。
- 块密码/哈希热路径:针对 MD 类分块哈希(RIPEMD-160、SHA-1/2、MD5、Blake 等)采用可变链状态 [var Nat32]、预解码消息调度 [var Nat32]、未装箱 Nat16 字节计数器、writeByte 折叠字节、write 中快速路径块解码,以及将全部轮次内联进 transform()。
使用方式:按 playbook 执行——先界定热路径并准备基准,再记录基线,然后增量应用变换(去掉仅用于遍历的 Blob.toArray、缓存尺寸、改用 Nat64 索引、用 [Nat8] 字母表、分块解码文本、使用定宽中间值、重塑循环、加 Prim.trap 防御不可达分支),最后做单元测试、属性检查和基准验证。
限制与注意:分块哈希技巧只适用于固定大小块、每块多轮、公开流式 API 且吞吐关键的场景,一次性或少量调用不应采用;使用 +% 需有不溢出不变式;注意块边界差一错误;比较基准时保持 [optimize] 与 [toolchain] wasm-opt 版本一致。文中提及的分配与内存管理、字符串构建、数据结构、异步、Candid、缓存等更多主题标注为即将推出,资料未提供具体内容。