1
XiLingHost 2023-09-14 16:37:12 +08:00
常见的 hash 都有硬件加速的,有啥浪费?
|
2
6379616e 2023-09-14 16:51:21 +08:00
随便引入一个 md5 的算法库,然后直接将最终的哈希 parseint 转一下就好了
|
3
NoobNoob030 2023-09-14 16:53:09 +08:00 1
为什么不计算一下 md5 的实际性能消耗呢
|
4
throme 2023-09-14 16:56:49 +08:00
取每个字符的 ascii 的值然后连起来啊
比如 ab -> 097098 |
5
jifengg 2023-09-14 16:58:05 +08:00
用你熟悉的代码,把字符串“a.jpg”生成一个 int32 的 hash 值 m ,如果你 cdn 有 n 个,就分配的就是 m%n 。
负载均衡常用的算法。 |
6
myqoo 2023-09-14 17:25:34 +08:00
```
function strHash(str) { var sum = 0; for (var i = 0, n = str.length; i < n; i++) { sum = (sum * 31 + str.charCodeAt(i)) >>> 0; } return sum; } ``` |
7
jiangzm 2023-09-15 00:46:52 +08:00
简简单单:
const buildUrl = url => url.split('').reduce((r, c) => r + c.charCodeAt(), 0) % 10 + 1; |
8
ysc3839 2023-09-15 01:22:45 +08:00 via Android
这种需求没必要 MD5 ,直接 fnv hash 就完事了,代码非常简单
https://github.com/schwarzkopfb/fnv1a/blob/master/index.js |
9
ysc3839 2023-09-15 01:28:24 +08:00 via Android
@XiLingHost 常见 hash 没有硬件加速,最多就是用 SIMD 指令优化一下,个人认为算不上硬件加速。而且用纯 js 实现的话,js 引擎的 JIT 大概不会生成 SIMD 代码。
你说的硬件加速可能指的是 x86 的 AES-NI 指令,这种是通过指令集实现的,和 SIMD 类似,js 引擎也不能生成这种代码。 |
10
ysc3839 2023-09-15 01:31:16 +08:00 via Android
不过 MD5 的性能消耗也没有那么大。在讨论抗暴力破解的时候,MD5 被认为是弱 hash 算法,在各类 hash 算法中性能消耗是比较小的、暴力破解耗时是较短的。
|
11
Vegetable 2023-09-15 09:11:24 +08:00
学而不思则罔,思而不学则怠。你这样“优化”做出来的结果想打败 md5 很难,没必要浪费这个时间。
|
12
yidadaa 2023-09-15 11:02:57 +08:00
试试 130 Byte 的依赖库 nanoid: https://github.com/ai/nanoid
|
13
libook 2023-09-15 17:58:26 +08:00
Hash 算法( MD5 就属于其中一种)是行业通用做法,压测一下看看吧,在你的业务规模下到底需要多少性能。
另外你都用 JS 了,就没必要在这个环节考虑性能问题了吧,profiling 之后把优化精力用在真正的瓶颈上。 https://www.measurethat.net/Benchmarks/Show/6372/0/sha1-js 这里有个几种方式用 JS 算 SHA-1 的压测页面,可以参考一下。 我所了解到的情况是,Intel 、AMD 、Apple 的常用 CPU 都有 Hash 算法加速,比如 SHA-1 、SHA-256 、SHA-512 。如果性能不够,可以看看是不是可以用 WebAssembly 来调用 CPU 的 Hash 算法加速。 |