【问题标题】:Is it possible to bundle a wasm binary into a JavaScript bundle to avoid a second request?是否可以将 wasm 二进制文件捆绑到 JavaScript 包中以避免第二次请求?
【发布时间】:2020-11-10 22:03:29
【问题描述】:

我有一个对启动时间非常敏感的应用程序,其中 html 内嵌了 JavaScript 以确保只发出一个请求。

我正在研究用 Rust/wasm 编写应用程序的部分内容,但我找不到任何描述如何内联 wasm 二进制文件的资源。

是否有可能以及我将如何去做?

【问题讨论】:

    标签: browser webassembly


    【解决方案1】:

    我可以将.wasm 文件转换为base64 并将其加载为ArrayBuffer。这将导致 30% 的文件大小损失

    function _base64ToArrayBuffer(base64) {
      var binary_string = window.atob(base64);
      var len = binary_string.length;
      var bytes = new Uint8Array(len);
      for (var i = 0; i < len; i++) {
          bytes[i] = binary_string.charCodeAt(i);
      }
      return bytes.buffer;
    }
    
    void async function main() {
      const file = 'AGFzbQEAAAABCAJgAX8AYAAAAg8BB2NvbnNvbGUDbG9nAAADAgEBBxEBDWV4cG9ydGVkX2Z1bmMAAQoIAQYAQSoQAAsAFARuYW1lAQQBAAFpAgcCAAEAAAEA'
      const bytes = _base64ToArrayBuffer(file)
      const obj = await WebAssembly.instantiate(bytes, window)
      obj.instance.exports.exported_func()
    }()
    

    【讨论】:

      猜你喜欢
      • 2017-07-20
      • 2021-07-25
      • 1970-01-01
      • 2018-11-07
      • 2021-11-02
      • 2010-11-11
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      相关资源
      最近更新 更多