Becavalier / Book-DISO-WebAssembly

A book related repository which name is 《深入浅出 WebAssembly》
MIT License
73 stars 17 forks source link

关于Webassembly的性能 #7

Closed kungfuboy closed 5 years ago

kungfuboy commented 5 years ago

你好,请教一下,如果我有一个计算量比较密集的包,已经用TS实现了,现在期望能有更高的性能,转成Webassembly是合理的吗?

我现在打算重构这个包,有以下几个想法:

  1. 用一门后端语言写,如Go / Rust,但是不确定是否合理,担心编译出来之后的性能反倒不如原生JS。

  2. 用TS写,通过 AssemblyScript 转成 wasm,但我不知道AssemblyScript是否成熟了?因为我记得一年多前还有人评价这个项目还只是个玩具。

  3. 还是老办法,用TS写转成JS。

所以,用JS写出来的代码 跟 用其他编程语言转的wasm相比,谁的性能更高?

谢谢!

Becavalier commented 5 years ago

@kungfuboy 你好,TS 本身对性能没有什么提升,如果有需要并且在确定兼容性可以接受的情况下是可以替换成 Wasm 的。如果确定是纯计算的逻辑很多,那么转成 Wasm 肯定性能是会有大幅度提升的。如果重写难度不大可以考虑用 C++ 或者 Rust 重写。C++ 的话走 Emscripten 可以同时降级到 ASM.js,而 Go 的话由于胶水代码体积还是很大,目前不太建议。AssemblyScript 可以试试看,有没有 BUG 只能回归测试看一下了,覆盖率高的话也是可以用的。总体看你的能力和精力平衡选择,毕竟用 C++/Rust 重写需要考虑很多问题,不是很熟练的话也很容易出现 OOM 或者内容泄露的问题。