推荐一篇介绍WebAssembly的好文,简单做了摘要:

作者介绍了wasm 能够运行到不同架构系统的原理,通过LLVM IR编译出wasm 虚拟指令集,然后不同平台的wasm的运行时进行编译。

然后对比了c、emcc、rust编译到wasm的过程,最终发现Rust是工具链最友好的,cmcc编译出来的结果带有大量的JS胶水代码,且API不够简洁,C语言编译出来的wasm文件是最小的,因为没有runtime。

最后作者以V8引擎为例介绍了wasm为什么比JS有更好的性能,主要是JS在底层有optimize和deoptimize的过程,编译引擎需要猜测参数类型,而wasm本身就是虚拟指令集,可以直接optimize,无需猜参数类型和deoptimize过程,当然前端的功能的性能也不是wasm直接决定的,最终是否能带来性能上的优化还是要综合对比性能指标,盲目将JS重写为wasm实现也是不明智的。
展开
4