![]() | 1 KagurazakaNyaa 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 ![]() 为什么不计算一下 md5 的实际性能消耗呢 |
4 throme 2023-09-14 16:56:49 +08:00 取每个字符的 ascii 的值然后连起来啊 比如 ab -> 097098 |
5 strong>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 算法加速。 |