V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LeeReamond
V2EX  ›  问与答

wasm 有什么应用前景?

  •  
  •   LeeReamond · 2021-08-09 12:00:14 +08:00 · 2915 次点击
    这是一个创建于 983 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天看了个手写 wasm 虚拟机的项目感觉挺炫酷的,以前没了解过 wasm 这个东西,它有什么具体的应用前景呢?有没有大佬能给一些例子。

    wasm 是由 cpp 和 rust 编译而来的,那么他们能使用 simd 优化吗?

    按我的理解,这个东西似乎设计的限制很严格,不太适合用来把 vue 或者 react 的 core 写成 bytecode,从而使网页程序获得一个普遍性的加速?

    感觉一个可供的前景似乎是,可以用来榨干用户 CPU 性能实现所有用户帮忙云挖矿。。。?

    20 条回复    2022-01-22 19:25:24 +08:00
    agagega
        1
    agagega  
       2021-08-09 12:09:25 +08:00 via iPhone
    好像已经有 simd 的实验性项目了。
    比较能想象到的应用前景是把已有的 native 代码搬到 Web,Electron 大胜利
    chenluo0429
        2
    chenluo0429  
       2021-08-09 13:52:16 +08:00
    我接触到的一个是浏览器进行视频编解码,另一个是 skia 进行 canvas 渲染,提高性能。
    namelosw
        3
    namelosw  
       2021-08-09 14:40:58 +08:00
    现在比较常见的场景是 Canvas / WebGL 等等需要很高性能,但是又不走 DOM 的场景。

    还有就是优化一些复杂的算法,和 JavaScript 互相传递,主要算法复杂但是传递量和频率都不大的情况。

    ---

    考虑未来前景的话,取决于市场推广顺利与否,如果顺利的话可以玩出花来。当然个人努力固然重要,也要考虑历史进程,以下都是可以实现的东西,至于能不能都看命。

    比如现在 Universal rendering 主要就是 React 和 Vue 这些,只能用 JavaScript,或者一些小众语言比如 F#。以后可能就是各种语言都可以了,以后的 Web 开发很可能就没有前端后端,都跟 Blazor 或者 Phoenix LiveView 一样了。

    再比如 Wasmer,Deno 这些 WASM runtime 也很多,还有 WASI 在推进,可以用同样的 API 在不同系统上写代码,运气好的话可以挑战一下 JVM 。因为 JVM 打不着 WASM (Applet...),只能被 WASM 打。可能有一天能实现真正的 write once run everywhere 。

    还有就是语言之间集成可能会变方便一些,比如 Kotlin 和 Java 互相调用,因为他们都在 JVM 。WASM 可以装的范围应该可以更多。可能以后 JavaScript 调用 Python 不用起进程,可以像很多语言嵌入 SQLite 一样走内部调用。

    再比如 C/S 和 B/S 在各个平台风水轮流转的传统,移动端 B/S 一直推广不利,因为一直被厂商垄断。也许 WASM 可以再战一波,如果移动端能拿下的话,很可能连手机,电视,游戏机,电脑,点餐机等等一切皆 Chromium 了。浏览器要都能搞了,谁还要鸡肋的 OS 们,反正 Unix 的文件设计早就名存实亡了 …
    jingslunt
        4
    jingslunt  
       2021-08-09 14:52:26 +08:00
    hronro
        5
    hronro  
       2021-08-09 15:44:04 +08:00 via iPhone
    wasm 目前性能还不太行,只比 JS 快一点点,有时还不如 JS 。现阶段最大的用途是复用已有的 C/C++ 库。
    3dwelcome
        6
    3dwelcome  
       2021-08-09 15:52:04 +08:00 via Android
    wasm 对我最大的用途,就是终于可以不用 js 写前端代码了。
    也不用学各种 vue 框架,完全可以自己用 c++从头设计一个框架,c++最适合的就是造轮子。
    有时候用不同语言,编程理念确实有着巨大的差异。
    写 js 久了,必然会 thinking in JavaScript,可我不想写一辈子 js 。
    murmur
        7
    murmur  
       2021-08-09 15:54:29 +08:00
    没啥场景,真的需要高性能为什么不扔掉 chrome 这层皮,直接对着 native 死磕,那么相信 chrome 的性能么
    nieyujiang
        8
    nieyujiang  
       2021-08-09 19:18:13 +08:00 via iPhone
    Figma 是个比较典型的栗子
    henryhu
        9
    henryhu  
       2021-08-09 19:37:03 +08:00
    我们在做 3D 应用,js 模型处理太耗时间,现在正在用 wasm 改造,希望速度有质的改善
    jim9606
        10
    jim9606  
       2021-08-09 19:42:38 +08:00
    我觉得主要是为了方便将 C/C++的应用搬进浏览器里,顺便做一些需要高性能但只需要 cpu 就能做的事。

    我目前觉得合理的用途是跑 ffmpeg 做一些 MediaSource Extensions 不支持的转码转封装操作,还有实现浏览器未支持的图片 /音频解码渲染,例如在 Chromium 上解码 HEIC 。
    djoiwhud
        11
    djoiwhud  
       2021-08-09 20:29:54 +08:00 via Android
    主要是把已有的 cpp 代码移植到 web 端。
    LeeReamond
        12
    LeeReamond  
    OP
       2021-08-09 22:17:18 +08:00 via Android
    @henryhu 楼上有老哥说 wasm 现在很慢。我倒是好奇这都 bytecode 了还能优化到哪去。。
    kkocdko
        13
    kkocdko  
       2021-08-09 22:38:50 +08:00 via Android
    @LeeReamond 字节码依然不是 Native 性能,类似于 LLVM IR,在客户端还是需要编译的。解释型引擎有 wasmer,性能很差,有 JIT 的 V8 wasm 性能也不咋地。
    shyling
        14
    shyling  
       2021-08-09 23:08:52 +08:00
    就把更多的客户端应用做到浏览器上吧
    EPr2hh6LADQWqRVH
        15
    EPr2hh6LADQWqRVH  
       2021-08-09 23:13:36 +08:00
    现在主要是用来运行 ffmpeg
    koast
        16
    koast  
       2021-08-09 23:57:36 +08:00 via Android   ❤️ 1
    见过用这个做 token 加密的....看来 js 混淆啥的已经满足不了他们了...
    locoz
        17
    locoz  
       2021-08-09 23:57:45 +08:00 via Android
    典型场景就是把以往的项目部分迁移至 web 、给部分需要在前端做但又需要高性能的事情提速,非典型场景就是像把反爬虫之类的一些安全措施放进去恶心人之类的。
    ShaunSS
        18
    ShaunSS  
       2021-08-10 09:44:10 +08:00
    webos 是未来吗
    risky
        19
    risky  
       2021-08-10 11:15:10 +08:00
    还有一个东西叫做 EOS 合约
    aCodingCat
        20
    aCodingCat  
       2022-01-22 19:25:24 +08:00
    @henryhu 请问现在改造完了吗,效果怎样?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4236 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:26 · PVG 13:26 · LAX 22:26 · JFK 01:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.