InfoQ|5分钟看懂WebAssembly

作者 | Mehdi Zed 译者 | 王强 策划 | 李俊辰 2019 年 12 月 5 日 , WebAssembly 正式加入 HTML、CSS 和 Javascript 的 Web 标准大家庭 。 很多事情都会受益于这一全新的标准 , 并且它在浏览器中的性能表现是空前的 。 本文会用五分钟的时间介绍一下这个正在进行中的小变革 。
本文最初发布于 jesuisundev.com 网站 , 经原作者授权由 InfoQ 中文站翻译并分享 。
往 事1995 年 , Brendan Eich 用了不到 10 天就创建了 Javascript 。 那时 , Javascript 的设计并非以速度见长 。 它基本上是用于表单验证的 , 同时速度非常缓慢 。 随着时间的流逝 , 它也在一天天变好 。
在 2008 年 , 异军突起的谷歌推出了自己全新的浏览器:谷歌 Chrome 。 Chrome 内部有一个名为 V8 的 Javascript 引擎 。 V8 的革命性进步是对 JavaScript 的即时(JIT)编译 。 从解释代码到 JIT 编译的这种转变大幅提升了 Javascript 的性能 , 从而让整个浏览器的速度变得飞快 。 如此快的速度将催生 NodeJS 或 Electron 等技术 , 并推动 Javascript 迎来爆炸式增长 。
在 2015 年 , WebAssembly 首次发布 , 并提供了一个运行在 Unity 下的游戏的小型演示 。 那款游戏是直接在浏览器中运行的!
在 2019 年 , W3C 使 WebAssembly 成为了新的 Web 标准 。 就像 V8 引擎一样 , WebAssembly 即将带来全新的性能革命 。 它的身影已经出现在了 Web 的赛道上 , 枪声一响便遥遥领先 。
什么是 WebAssembly?WebAssembly(缩写为 wasm)是一种使用非 Javascript 代码 , 并使其在浏览器中运行的方法 。 这些代码可以是 C、C++ 或 Rust 等 。 它们会被编译进你的浏览器 , 在你的 CPU 上以接近原生的速度运行 。 这些代码的形式是二进制文件 , 你可以直接在 Javascript 中将它们当作模块来用 。
WebAssembly 不能替代 Javascript 。 相反 , 这两种技术是相辅相成的 。 通过 Javascript API , 你可以将 WebAssembly 模块加载到你的页面中 。 也就是说 , 你可以通过 WebAssembly 来充分利用编译代码的性能 , 同时保持 Javascript 的灵活性 。
InfoQ|5分钟看懂WebAssembly
本文插图
WebAssembly 这个名子有点误导人 。 WebAssembly 确实适用于 Web , 但它的使用场景远不止于此!开发 WebAssembly 的团队为了能让它用在所有环境下 , 跨越了重重障碍才取得成功 。 我们已经看到了这样的案例:
此外 , 有一个误解也是相当普遍的 。 WebAssembly 不是编程语言 。 WebAssembly 是一种中间格式 , 叫做字节码 , 其可作为其他语言的编译目标 。 这么说可能还是会让人云里雾里 , 我们来画些图具体解释一下 。
它是如何工作的?
InfoQ|5分钟看懂WebAssembly
本文插图
看到这张图片了吧?画的多棒啊 。 如果我说我是用 Photoshop 画的你信不信?管它呢 , 我们来看图中的内容 。