WebAssembly 概念: https://developer.mozilla.org/zh-CN/docs/WebAssembly/Concepts
WebAssembly 是一种运行在现代网络浏览器中的新型代码,并且提供新的性能特性和效果。
2022.6.21 星期二 :
mozilla
WebAssembly 或者 wasm 是一个可移植、体积小、加载快并且兼容 Web 的全新格式
WebAssembly和asm.js性能对比
什么时候使用WebAssembly?
说了这么多,我到底什么时候该使用它呢?总结下来,大部分情况分两个点。 - 对性能有很高要求的App/Module/游戏 - 在Web中使用C/C++/Rust/Go的库 举个简单的例子。如果你要实现的Web版本的Ins或者Facebook, 你想要提高效率。那么就可以把其中对图片进行压缩、解压缩、处理的工具,用C++实现,然后再编译回WebAssembly。
WebAssembly的几个开发工具
AssemblyScript。支持直接将TypeScript编译成WebAssembly。这对于很多前端同学来说,入门的门槛还是很低的。
Emscripten。可以说是WebAssembly的灵魂工具不为过,上面说了很多编译,这个就是那个编译器。将其他的高级语言,编译成WebAssembly。
WABT。是个将WebAssembly在字节码和文本格式相互转换的一个工具,方便开发者去理解这个wasm到底是在做什么事。
WebAssembly的意义
在我的个人理解上,WebAssembly并没有要替代JavaScript,一统天下的意思。我总结下来就两个点。
- 给了Web更好的性能
- 给了Web更多的可能 关于WebAssembly的性能问题,之前也花了很大的篇幅讲过了。
而更多的可能,随着WebAssembly的技术越来越成熟,势必会有更多的应用,从Desktop被搬到Web上,这会使本来已经十分强大的Web更加丰富和强大。
WebAssembly实操
其他
4. WebAssembly能取代js吗
自从有了WebAssembly以来,一直有一股声音说可以取代JavaScript了。他们的观点是传统的解释型语言在执行时免不了要进行词法分析 -> 语法分析 -> 预解析 -> 解释执行等过程,性能太差。但是现代浏览器的JS引擎在进化的过程中引入了许多优化手段如字节码缓存,可以省掉每次解释执行时重新遍历语法树的过程,虚拟机可直接取指 -> 解码 -> 运行。Chrome V8的JIT在运行过程中直接生成并缓存机器码,下次执行时可由计算机直接执行,连解码的过程都省掉了。虽然JavaScript跟C、C++等静态语言相比执行速度还有很大差距,但是大多数Web应用的性能瓶颈已经不是JavaScript语言本身了,反而是网络资源的加载,这一点WebAssembly并无优势。
而且,当要开发一个新的功能时,无论你是选择用C、C++、Rust还是Java,开发成本都要比JavaScript高。遇到不兼容WebAssembly的浏览器(见下图),你还得考虑降级为用JavaScript实现,这无疑增加了业务复杂性。