阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      JS WebAssembly.compile()

      这是一个实验中的功能
      此功能某些浏览器尚在开发中。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

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

      语法

      Promise 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](https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/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

      SpecificationStatusComment
      [WebAssembly JavaScript Interface
      compile()](https://webassembly.github.io/spec/js-api/#webassemblycompile)Working DraftInitial draft definition.

      See also

      目录
      目录