收藏
回答

WXWebAssembly.instantiate方法的第一个参数,如何通过远程下载本地实例化?

根据报错提示,第一个参数需要传入一个绝对路径的.wasm文件,如pages/index/hello.wasm

如果需要将远程的wasm下载到本地再实例化应该如何实现呢,报错明确提示了,不能以wxfile://或http的文件路径开头,所有还有其他读取存储后文件绝对路径的且获取出来不为wxfile:前缀的绝对路径,api可以调用吗?

wasm资源文件超出了2m,希望可以走远程下载到本地再实例化

const info = {};
const cloudWasm = 'https://cdn.com/hello.wasm'
wx.downloadFile({
  url:cloudWasm,
  success:res=>{
      const {tempFilePath} = res;
      // 如何将tempFilePath转成绝对路径呢?
    const fs = wx.getFileSystemManager();
      const { env:{ USER_DATA_PATH } } = wx; // 当前用户设备的环境目录
      const wasmfilename = tempFilePath.slice(tempFilePath.lastIndexOf('/') + 1);// 提取文件名和后缀
     fs.saveFileSync(tempFilePath, wasmdir + wasmfilename);
     
      const wasmdir = USER_DATA_PATH + "/wasm/"// 在当前用户环境下新建一个目录
      const obsoluteWasmFilePath = `${tempFilePath}/${wasmfilename}`;

      WXWebAssembly.instantiate(obsoluteWasmFilePath,info).then(suc=>{
           console.log('初始化成功') 
      },err=>{
           console.log('初始化失败')  
      })
    
          }
    }  )


回答关注问题邀请回答
收藏

4 个回答

  • 小程序技术专员-binnie
    小程序技术专员-binnie
    2021-04-20

    原生  WebAssembly 不再提供,用下面的接口


    WASM 参考文档:


    1. WXWebAssembly.instantiate(path, imports) 方法。和官方用法区别是第一个参数只能为包内路径,同时支持传包含 wasm.br 后缀的 brotli 压缩文件路径

    2. 支持 WXWebAssembly.Memory

    3. 支持 WXWebAssembly.Table

    4. 支持 WXWebAssembly.Global

    5. export 支持函数、Memory、Table,暂不支持 Global


    2021-04-20
    有用 4
    回复 9
    • 寸许月光
      寸许月光
      2021-04-21
      好嘞,我们在编译胶水代码的初始化过程中,遇到一个比较棘手的问题多线程真机不支持问题,可以给一点方向性指引吗?
      问题描述:
      1、正常我们编译opencv+ncnn到wasm修改胶水代码后,在mac的微信开发者工具下,可以正常运行,不报错,但是到真机调试的时候报错Uncaught (in promise) FrameworkError
      <CompileError: WebAssembly.instantiate(): Invalid opcode (enable with --experimental-wasm-threads) @+3819



      2、8.0.1版本的opencv我们编译到真机是可以运行成功的,8.0.2之后由于换成包装函数WXWebAssembly的实例化WXWebAssembly.instantiate,就报了上面的多线程支持报错。应该你们真机环境是从8.0.2开始不支持多线程了


      定位方法:
      1、我们编译opencv到wasm时手动关掉了的多线程支持USE_PTHREADS=0,但是编译后的wasm中还是会触发多线程,具体哪些特性会触发多线程我们还没有定位到


      2、我们编写一个简单的c++的hello world到wasm真机执行可以正常运行,不报错,单独编译c语言版的ncnn到wasm也不报错


      提问:
      1、想知道你们安卓的定制V8内核与开发者工具的内核有什么差别吗?
      2、由于我们的算法库对opencv的依赖较高,目前还是主要从解决opencv的方向下手
      3、如果最终还是编译不成功,才可能考虑重写C++的算法库去编译wasm
      2021-04-21
      回复
    • 寸许月光
      寸许月光
      2021-04-21
      已经可以跑起来了
      2021-04-21
      1
      回复
    • 小程序技术专员-binnie
      小程序技术专员-binnie
      已追加反馈信息

      你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的微信号。

    • 寸许月光
      寸许月光
      已追加反馈信息
      微信号
      *****
    • 小程序技术专员-binnie
      小程序技术专员-binnie
      2021-04-21回复寸许月光
      点上面的按钮反馈下微信号呢,我们沟通下看看
      2021-04-21
      回复
    查看更多(4)
  • .DL.
    .DL.
    2021-08-13

    请问我的微信开发者工具PC端可以接受数据,但是真机调试显示接收到数据,但是不显示

    2021-08-13
    有用 1
    回复
  • xiongyoul
    xiongyoul
    2021-04-28

    你好最后怎么解决的呢?可以提供一下WXWebAssembly.instantiate加载远程opencv.wasm的示例代码吗

    2021-04-28
    有用
    回复 2
    • 寸许月光
      寸许月光
      2021-04-29
      不支持远程加载,放弃吧
      2021-04-29
      回复
    • 寸许月光
      寸许月光
      2021-04-29
      想办法缩减你们算法库和渲染库wasm的体积吧,另外模型可以分拆出来远程加载,wasm不可以远程加载
      2021-04-29
      回复
  • 寸许月光
    寸许月光
    2021-04-07

    WXWebAssembly.instantiate方法,如何通过远程下载wasm文件且存储读取为非wxfile://开头的绝对路径,实例化成功????

    2021-04-07
    有用
    回复 2
    • Otter
      Otter
      2021-07-26
      您好,请问多线程真机的问题你们解决了吗?
      2021-07-26
      回复
    • Otter
      Otter
      2021-07-27
      您好,我解决了真机多线程的问题,更新一下opencv的版本就可以了,我可用的opencv版本是4.3.0,之前3.4.14编译出来的wasm会报这个错误
      2021-07-27
      2
      回复
登录 后发表内容
问题标签