WebAssembly
WebAssembly
这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。
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.Module()
创建一个新的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 APIThe definition of 'WebAssembly' in that specification. | Draft | Initial draft definition. |
浏览器兼容性
Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic Support | 57 | 16 | 522 | No | 44 | 11 |
CompileError | 57 | 16 | 522 | No | 44 | 11 |
Instance | 57 | 16 | 522 | No | 44 | 11 |
LinkError | 57 | 16 | 522 | No | 44 | 11 |
Memory | 57 | 16 | 522 | No | 44 | 11 |
Module | 57 | 16 | 522 | No | 44 | 11 |
RuntimeError | 57 | 16 | 522 | No | 44 | 11 |
Table | 57 | 16 | 522 | No | 44 | 11 |
compile | 57 | 16 | 522 | No | 44 | 11 |
instantiate | 57 | 16 | 522 | No | 44 | 11 |
validate | 57 | 16 | 522 | No | 44 | 11 |
Feature | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
Basic Support | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
CompileError | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
Instance | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
LinkError | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
Memory | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
Module | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
RuntimeError | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
Table | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
compile | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
instantiate | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
validate | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |