asm.js和WebAssembly之间有什么区别?

我最近一直在阅读有关asm.js和WebAssembly的内容:

http://ejohn.org/blog/asmjs-javascript-compile-target/

From ASM.JS to WebAssembly

我仍然对一些事情感到困惑:

  1. asm.js代码是否及时编译并运行?编译成什么
  2. 除了asm.js是文本和wasm(web程序集)是二进制之外,这两个版本之间有什么区别
  3. 这对于在浏览器中运行的其他脚本语言意味着什么?以python为例,它会是
    • 编译为wasm的python代码?或
    • python解释器(Cpython)编译成wasm并解释python

asm.js是js的一个子集,具有“高度优化”的指令。基本上,您可以声明类型(int,float),js引擎(在浏览器中也是node.js引擎)将更快地执行指令。如果您的应用程序与WebGL一起使用时进行大量计算或图形处理,那么它会带来好处

web assembly是一种二进制格式,适用于JS、所有JS,而不仅仅是asm.JS。它不是字节码,而是解析器计算的AST的二进制编码。它有两大好处:

  • JS引擎可以跳过解析步骤
  • 它比JS原始源代码要紧凑得多

我们已经可以为JS编写浏览器代码:EnScript可以在JS代码中编译C++代码。其他transcompiler已经可以将您的代码编译成JS。
使用asm.js,代码在计算时可以运行得更快。
使用web程序集,代码将更加紧凑,浏览器将能够更快地处理它(因为它将能够跳过解析)。
你不会有像DirectX、JavaApplets、Flash或Silverlight这样的新插件来加载,因为一切都将在JS沙盒中运行

发表评论