wasm 有什么应用前景?

2021-08-09 12:00:14 +08:00
 LeeReamond

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

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

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

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

2929 次点击
所在节点    问与答
20 条回复
agagega
2021-08-09 12:09:25 +08:00
好像已经有 simd 的实验性项目了。
比较能想象到的应用前景是把已有的 native 代码搬到 Web,Electron 大胜利
chenluo0429
2021-08-09 13:52:16 +08:00
我接触到的一个是浏览器进行视频编解码,另一个是 skia 进行 canvas 渲染,提高性能。
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
2021-08-09 14:52:26 +08:00
hronro
2021-08-09 15:44:04 +08:00
wasm 目前性能还不太行,只比 JS 快一点点,有时还不如 JS 。现阶段最大的用途是复用已有的 C/C++ 库。
3dwelcome
2021-08-09 15:52:04 +08:00
wasm 对我最大的用途,就是终于可以不用 js 写前端代码了。
也不用学各种 vue 框架,完全可以自己用 c++从头设计一个框架,c++最适合的就是造轮子。
有时候用不同语言,编程理念确实有着巨大的差异。
写 js 久了,必然会 thinking in JavaScript,可我不想写一辈子 js 。
murmur
2021-08-09 15:54:29 +08:00
没啥场景,真的需要高性能为什么不扔掉 chrome 这层皮,直接对着 native 死磕,那么相信 chrome 的性能么
nieyujiang
2021-08-09 19:18:13 +08:00
Figma 是个比较典型的栗子
henryhu
2021-08-09 19:37:03 +08:00
我们在做 3D 应用,js 模型处理太耗时间,现在正在用 wasm 改造,希望速度有质的改善
jim9606
2021-08-09 19:42:38 +08:00
我觉得主要是为了方便将 C/C++的应用搬进浏览器里,顺便做一些需要高性能但只需要 cpu 就能做的事。

我目前觉得合理的用途是跑 ffmpeg 做一些 MediaSource Extensions 不支持的转码转封装操作,还有实现浏览器未支持的图片 /音频解码渲染,例如在 Chromium 上解码 HEIC 。
djoiwhud
2021-08-09 20:29:54 +08:00
主要是把已有的 cpp 代码移植到 web 端。
LeeReamond
2021-08-09 22:17:18 +08:00
@henryhu 楼上有老哥说 wasm 现在很慢。我倒是好奇这都 bytecode 了还能优化到哪去。。
kkocdko
2021-08-09 22:38:50 +08:00
@LeeReamond 字节码依然不是 Native 性能,类似于 LLVM IR,在客户端还是需要编译的。解释型引擎有 wasmer,性能很差,有 JIT 的 V8 wasm 性能也不咋地。
shyling
2021-08-09 23:08:52 +08:00
就把更多的客户端应用做到浏览器上吧
EPr2hh6LADQWqRVH
2021-08-09 23:13:36 +08:00
现在主要是用来运行 ffmpeg
koast
2021-08-09 23:57:36 +08:00
见过用这个做 token 加密的....看来 js 混淆啥的已经满足不了他们了...
locoz
2021-08-09 23:57:45 +08:00
典型场景就是把以往的项目部分迁移至 web 、给部分需要在前端做但又需要高性能的事情提速,非典型场景就是像把反爬虫之类的一些安全措施放进去恶心人之类的。
ShaunSS
2021-08-10 09:44:10 +08:00
webos 是未来吗
risky
2021-08-10 11:15:10 +08:00
还有一个东西叫做 EOS 合约
aCodingCat
2022-01-22 19:25:24 +08:00
@henryhu 请问现在改造完了吗,效果怎样?

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

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

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

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

© 2021 V2EX