用 xxHash 替掉 SHA1,让虚幻编辑器启动快起来
来源:larstofus.com — 2026-10-11
📋 概述
Lars Thiessen 继续他的「优化要往被忽视的角落找」系列:他通常跳过名字里带 Shader 的函数,直到某次放大火焰图才发现着色器哈希调用了 SHA1——一个源自 NSA、早已被密码学攻破因而「不该再用」的算法,而这里哈希的只是着色器源码(含注释与版权声明),完全不需要密码学强度。他把 SHA1 换成引擎里已有的 xxHash,改动比预想的多,因为所有存储和传递哈希的地方都要同步更新,附带好处是哈希从 20 字节缩到 8 字节。用 Superluminal 对 Electric Dreams 示例工程各做 5 次开编辑器对照后,FSHA1::Update 里的 12.90 秒降到 FXxHash64Builder::Update 的 1.59 秒,快了八倍。提交的 PR 已被 Epic 接受,并在代码里把 xxHash 包进 FShaderHash,方便将来再换算法。
🔑 核心要点
- 思路:避开明显已被充分优化的地方,去攻那些因冷门或在常规剖析中看不见而被忽视的角落
- 发现:着色器源码的哈希用的是 SHA1,它源自 NSA、早已被密码学攻破,本来就不该再用于敏感信息,而且并不快
- 被哈希的数据只是着色器源码,包括注释与版权声明,毫无保密需求
- 换成引擎里已有的 xxHash 后,FSHA1::Update 里的 12.90 秒降到 1.59 秒,快了八倍
- 顺手收益:哈希从 20 字节缩到 8 字节;测试方式是对示例工程各跑 5 次开编辑器对照
- Epic 接受时还做了一处改良:把 xxHash 包进 FShaderHash,将来换算法不必再改很多地方
💡 金句
一个很聪明的做法,我此前没想到,是把 xxHash 包进另一个结构体 FShaderHash。
👍 0
👎 0
← 返回 Lobsters 首页