翻译正在进行中。

这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

WebAssembly.compile() 方法编译WebAssembly二进制代码到一个WebAssembly.Module 对象。如果在实例化之前有必要去编译一个模块,那么这个方法是有用的(否则,将会使用WebAssembly.instantiate() 方法)

语法

Promise<WebAssembly.Module> WebAssembly.compile(bufferSource);

参数

bufferSource
一个包含你想编译的wasm模块二进制代码的 typed array(类型数组) or ArrayBuffer(数组缓冲区)

返回值

一个解析为 WebAssembly.ModulePromise 对象。

异常

例子

下面的例子 (查看GitHub上的 index-compile.html 例子, 并且也能 查看运行效果) 使用 compile() 方法编译加载进来的 simple.wasm 二进制代码并且使用 postMessage() 发送给一个 worker

var worker = new Worker("wasm_worker.js");

fetch('simple.wasm').then(response =>
  response.arrayBuffer()
).then(bytes =>
  WebAssembly.compile(bytes)
).then(mod =>
  worker.postMessage(mod)
);

在线程中 (查看 wasm_worker.js) 我们定义了一个导入对象共模块使用,然后设置了一个事件处理函数来接收主线程发送过来的模块。当模块被接收之后,我们使用WebAssembly.Instantiate() 方法创建了一个实例,调用从它里面导出的一个方法,接下来展示了我们可以用 WebAssembly.Module.exports 属性来调用模块上返回的可用信息。

var importObject = {
  imports: {
    imported_func: function(arg) {
      console.log(arg);
    }
  }
};

onmessage = function(e) {
  console.log('module received from main thread');
  var mod = e.data;

  WebAssembly.instantiate(mod, importObject).then(function(instance) {
    instance.exports.exported_func();
  });

  var exports = WebAssembly.Module.exports(mod);
  console.log(exports[0]);
};

Specifications

Specification Status Comment
WebAssembly JavaScript API
compile()
Draft Initial draft definition.

Browser compatibility

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support5716522 No4411
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic support5757 Yes1522 No ?11

1. This feature is behind the Experimental JavaScript Features preference.

2. Disabled in the Firefox 52 Extended Support Release (ESR).

See also

文档标签和贡献者

 此页面的贡献者: kungfucode-rex
 最后编辑者: kungfucode-rex,