V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
3dwelcome
V2EX  ›  前端开发

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

  •  
  •   3dwelcome · 2022-02-14 15:23:31 +08:00 · 1550 次点击
    这是一个创建于 1032 天前的主题,其中的信息可能已经有所发展或是发生改变。
    上周写了个计算 MD5 的在线工具( /t/832244 ), 实际使用中发现,在代码异常复杂情况下,JS 的 JIT 优化会失效,导致性能断崖式下跌。

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

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

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


    https://tool2d.com/#hashtool

    9 条回复    2022-02-14 16:21:57 +08:00
    eason1874
        1
    eason1874  
       2022-02-14 15:25:19 +08:00
    我去,wasm 这么秀吗
    3dwelcome
        2
    3dwelcome  
    OP
       2022-02-14 15:26:42 +08:00
    @eason1874 正常情况下,两者速度其实没多大区别,比如 MD5,SHA1,SHA256 。

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

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

    我也是百思不得其解。
    yaphets666
        9
    yaphets666  
       2022-02-14 16:21:57 +08:00   ❤️ 1
    wasm 就是这么用的,作为一个 sdk 或者工具包。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   885 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:32 · PVG 04:32 · LAX 12:32 · JFK 15:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.