早在2015年,包括Google,Microsoft,Mozilla和WebKit项目的财团就宣布了WebAssembly。本周,Mozilla,Intel,Red Hat和Fastly宣布了一个名为Bytecode Alliance的新联盟,该联盟旨在促进WebAssembly和其他“新软件基础”的发展,它们将允许通过默认安全方式在内部或内部运行不受信任的代码。 Web浏览器环境之外。
对于许多人来说,这引发了一个显而易见的问题:什么是WebAssembly?WebAssembly(wasm)曾经是并且可能是一个令人兴奋的项目,它提供了一种在浏览器中运行本机字节码的方法,与当时和现在使用的Javascript引擎相比,可能会极大地提高性能。
Javascript经常被误解为在运行时解释的脚本语言。尽管通常将其作为源代码加载到浏览器中,但可以将其解释为或编译为字节码并执行。编译意味着执行性能更高(尤其是在紧密循环内),但是这也意味着启动JIT编译本身所需的时间会受到启动惩罚。
实际上,Javascript JIT还有很多其他功能,包括不同的编译器模式,专门化,优化和救助。如果您需要更多细节,Mozilla的Lin Clark为hacks.mozilla.org写了一个很好的,易于阅读的说明。
为了消除JIT编译带来的损失,Mozilla引入了asm.js,这是Javascript的专门子集,最常用作C等重载编程语言的源到源编译目标。AC语言程序交叉编译到asm.js并以预先(AOT)编译的字节码块运行(根据Mozilla)通常会在用Clang编译的C代码的本机性能的50%或更好的范围内。