这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。
WebAssembly
JavaScript 对象是所有 WebAssembly 相关功能的命名空间。
和大多数全局对象不一样,WebAssembly 不是一个构造函数(它不是一个函数对象)。它类似于 Math
对象或者 Intl
对象,Math 对象也是一个命名空间对象,用于保存数学常量和函数;Intl则是用于国际化和其他语言相关函数的命名空间对象。
描述
WebAssembly 对象主要用于:
- 使用
WebAssembly.instantiate()
函数加载 WebAssembly 代码。 - 通过
WebAssembly.Memory()
/WebAssembly.Table()
构造函数创建新的内存和表实例。 - 由
WebAssembly.CompileError()
/WebAssembly.LinkError()
/WebAssembly.RuntimeError()
构造函数来提供 WebAssembly 中的错误信息。
方法
WebAssembly.instantiate()
- 用于编译和实例化 WebAssembly 代码的主 API,返回一个 Module 和它的第一个实例。
WebAssembly.compile()
- 把 WebAssembly 二进制代码编译为一个
WebAssembly.Module
,不进行实例化。 WebAssembly.validate()
- 校验 WebAssembly 二进制代码的 typed array是否合法,合法则返回 true ,否则返回 false 。
构造器
WebAssembly.Module()
- 创建一个新的WebAssembly模块对象。
WebAssembly.Instance()
- 创建一个新的WebAssembly实例对象。
WebAssembly.Memory()
- 创建一个新的WebAssembly内存对象。
WebAssembly.Table()
- 创建一个新的WebAssembly表格对象。
WebAssembly.CompileError()
- 创建一个新的WebAssembly编译错误对象。
WebAssembly.LinkError()
- 创建一个新的WebAssembly链接错误对象。
WebAssembly.RuntimeError()
- 创建一个新的WebAssembly运行时错误对象。
示例
通过fetch方法获取了WebAssembly字节码后,我们通过WebAssembly.instantiate()
方法对模块进行编译和实例化,在这过程中将一个JavaScript 函数导入WebAssembly模块。这个promise实例解析成一个对象(result),result包含编译了的Module和Instance对象。接下来我们调用一个Instance导出的WebAssembly方法。
var importObject = { imports: { imported_func: function(arg) { console.log(arg); } } }; fetch('simple.wasm').then(response => response.arrayBuffer() ).then(bytes => WebAssembly.instantiate(bytes, importObject) ).then(result => result.instance.exports.exported_func() );
注意: 有关使用了我们 fetchAndInstantiate()
库函数的示例,请查看Github上的 index.html (或者查看在线示例) 。
规范
Specification | Status | Comment |
---|---|---|
Web Assembly JavaScript API WebAssembly |
Draft | 初始草案定义 |
浏览器兼容性
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|---|
Basic support | 57 | 未实现 | 52 (52)[1] | 未实现 | (Yes) | 未实现 |
Feature | Chrome for Android | Android Webview | Edge Mobile | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|
Basic support | 57 | 57 | 未实现 | 52.0 (52)[1] | 未实现 | 未实现 | 未实现 |
[1] WebAssembly 在Firefox 52+中被启用, 但是在 Firefox 52 Extended Support Release (ESR.) 中被禁用。
[2] 当前通过 “实验中的JavaScript特性” 标签进行支持。可以查看这篇博客获取更多细节。