WebAssembly.compile() - JavaScript 编辑
这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。
WebAssembly.compile()
方法编译WebAssembly二进制代码到一个WebAssembly.Module
对象。如果在实例化之前有必要去编译一个模块,那么这个方法是有用的(否则,将会使用WebAssembly.instantiate()
方法)
语法
Promise<WebAssembly.Module> WebAssembly.compile(bufferSource);
参数
- bufferSource
- 一个包含你想编译的wasm模块二进制代码的 typed array(类型数组) or ArrayBuffer(数组缓冲区)
返回值
一个解析为 WebAssembly.Module
的Promise
对象。
异常
- 如果
bufferSource
不是一个 typed array, 将抛出一个TypeError
。 - 如果编译失败 promise 将会 reject 一个
WebAssembly.CompileError
。
例子
下面的例子 (查看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 Interface compile() | Working Draft | Initial draft definition. |
Browser compatibility
BCD tables only load in the browser
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.See also
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论