用 WASM 插件,给 JS 提速 17 倍。

2022-02-14 15:23:31 +08:00
 3dwelcome
上周写了个计算 MD5 的在线工具( /t/832244 ), 实际使用中发现,在代码异常复杂情况下,JS 的 JIT 优化会失效,导致性能断崖式下跌。

比如 SHA384 和 SHA512 算法,处理一个 12M 文件,需要 16 秒以上,慢的难以接受( JS 库代码只是暴力移植,没有深度适配,让 chrome 优化不能发挥应有的性能。)

于是剩下办法有两个,一是重写 JS 库,二是用 WASM 吧 SHA512 封装好之后,给 JS 调用。

我选择后者,WebAssembly 实测速度提升惊人。个人感觉 WASM 最大的功劳,应该是提供可预测的高性能,而不是浏览器随缘优化的 JS 浮动性能。


https://tool2d.com/#hashtool

1527 次点击
所在节点    前端开发
9 条回复
eason1874
2022-02-14 15:25:19 +08:00
我去,wasm 这么秀吗
3dwelcome
2022-02-14 15:26:42 +08:00
@eason1874 正常情况下,两者速度其实没多大区别,比如 MD5,SHA1,SHA256 。

SHA512 属于比较极端的情况,估计能遇到的人比较少。
duke807
2022-02-14 15:35:19 +08:00
常用的加解密和 hash 算法,調用瀏覽器自帶的接口更快吧
duke807
2022-02-14 15:38:57 +08:00
你用的 js 庫可能默認也是調用瀏覽器自帶的接口,自帶接口不可用的時候才用 js 代碼做計算,這才是速度相差這麼多的原因
3dwelcome
2022-02-14 15:41:23 +08:00
@duke807 我查了一下,还真有 WebAPI 对应的内置 hash 函数,汗。

果然 JS 是万能的。
duke807
2022-02-14 15:46:15 +08:00
@3dwelcome 瀏覽器自帶的接口有一個很噁心的地方,必須是 https 才給用,有時內網做個小工具,沒必要上 https ,然後說為了安全不允許用各種 hash 算法,不知道怎麼就不安全了,chrome 這幫人簡直腦子有坑
duke807
2022-02-14 15:49:53 +08:00
@3dwelcome
很多人用 wasm 是為了保護自己的代碼,一方面是防止代碼被人抄襲,另一方面是怕自己代碼做壞事被人抓到證據
我唯一一次做項目用 wasm 是把 linux 的 convert 命令打包到瀏覽器,給圖片做 dithering 算法
3dwelcome
2022-02-14 15:50:06 +08:00
@duke807 我也发现了,前一阵 chrome 的 br 算法,也只能在 https 下用,http 直接不支持。

我也是百思不得其解。
yaphets666
2022-02-14 16:21:57 +08:00
wasm 就是这么用的,作为一个 sdk 或者工具包。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/833776

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX