自从2008年各大浏览器为JavaScript执行引擎加入JIT(Just in Time, 即时编译器)以来,JavaScript在浏览器的执行性能有了一个量级的飞跃提升,促进了Web领域的飞速发展,一大波大型Web应用丰富了我们的网络世界。但是,JIT带来的性能提升也有天花板,在处理复杂运算的情况下表现仍有不足,为了更进一步解决JavaScript的性能问题,WebAssembly就应运而生了。
(本文非例子部分的图片出自文章1. https://hacks.mozilla.org/2017/02/a-cartoon-intro-to-webassembly/,文字部分基本参考该文章)
1.什么是WebAssembly。
-
它是一种新的、跨平台的web编译技术,可以让众多静态语言编译出浏览器可以运行的代码文件,文件格式为wasm,是一种相当接近机器语言的二进制格式文件;
-
相比于文本格式的JavaScript文件来说有着体积小、下载速度快的特点;
-
因为是从强类型语言编译的,所以JavaScript引擎不用猜测变量类型,也不用经历弃优化、重优化步骤,所以代码运行得更快;
-
这种技术出现,并不是为了替代JavaScript,而是作为JavaScript的一个良好补充;
很有可能就是WebAssembly。
WebAssembly如何工作
工作原理:WebAssembly的工作原理简要来说是将C,C++, Rust等静态语言的程序编译成浏览器能够运行的wasm二进制文件,当浏览器加载wasm文件后编译为本地机器码后运行。
我们知道大多数静态高级语言是通过编译器前端编译成为中间代码,然后再由编译器后端把中间代码翻译成目标机器的可执行机器码的。
而wasm对应的位置则是生成特定平台机器码之前,类似于一种汇编语言,但是它不对应真实的物理机器,而是一种对应抽象的机器,比JavaScript源码更直接地对应机器码。浏览器下载wasm文件后只需要做简单的编译就能执行。