roland_chou 2022-07-07 18:03 采纳率: 0%
浏览 186
已结题

js引用wasm文件如何取消入参

问题遇到的现象和发生背景

想将
https://github.com/qiuxiang/aubiojs
库编译成wasm格式文件,然后在小程序内调用。
在小程序内使用
https://developers.weixin.qq.com/miniprogram/dev/framework/performance/wasm.html
方法来引入使用。
但由于对wasm技术不了解,在用WXWebAssembly.instantiate(path, imports)方法引入时,imports需要传参,如果不传的话就报错,报错内容为:
TypeError: WebAssembly.instantiate(): Import #0 module="a" error: module is not an object or function
把a加进去又有新报错LinkError: WebAssembly.instantiate(): Import #0 module="a" function="a" error: function import requires a callable
就说明有一堆参数要盲猜填写。
然后对比着代码库编译生成的js文件(就是wasm配套的js文件),发现需要入参的参数很多,于是我就无从下手了。
我不清楚这些参数是如何产生的,能否在编译wasm文件时就取消这些入参,假若必传的话我该传啥。

问题相关代码,请勿粘贴截图

WXWebAssembly.instantiate('/utils/aubio.wasm', {
a: {}
}).then(res => {
console.log('WXWebAssembly', res);
const instance = res.instance;
console.log('instance', instance.exports);
instance.exports.then(result => {
console.log('result', result);
})
}).catch(error => {
console.error('error', error);
})

运行结果及报错内容

LinkError: WebAssembly.instantiate(): Import #0 module="a" function="a" error: function import requires a callable

我的解答思路和尝试过的方法

因为不懂wasm编译,所以无从下手。

我想要达到的结果

https://github.com/qiuxiang/aubiojs
编译出的wasm文件能够成功在小程序内使用。

  • 写回答

2条回答 默认 最新

  • 吴维炜 前端领域优质创作者 2022-07-13 14:45
    关注
    • 使用两个 worker,一个 worker 存储数据,另一个 worker 处理数据。通过这种方式可以终止处理工作者,并且数据将始终保留。每当它启动时,将超过 500MB 的数据复制到 webworker 会花费太多时间。这可以使用SharedArrayBuffer 完成,但由于一些安全问题,它的支持现在非常有限/不存在。

    • 使用Emterpreter和使用emscripten_sleep_with_yield. 在使用 Emterpreter 时会破坏性能(在上面的文档中提到过),并使所有查询速度降低约 4-6 倍。

    • 始终运行第二个工作程序,并且在 UI 中只显示最新的。如果它不是共享数据结构并且数据大小为 500MB x 2 = 1GB(在现代桌面浏览器/计算机中运行时,500MB 似乎是一个大但可接受的大小),则可能会遇到很多 OOM 错误。

    • 使用对服务器的 API 调用来存储状态并检查查询是否被取消。尽管从每个正在运行的查询中每秒对网络请求进行长时间轮询似乎很笨拙。

    • 使用增量解析方法,一次只解析一行。但也需要大量重写解析函数,以便每个函数都支持这一点(实际的数据解析在几个函数中处理——过滤、搜索、计算、分组、排序等。

    • 使用 IndexedDB 并将状态存储在 javascript 中。在 WASM 中分配一块内存,然后将其指针返回给 JavaScript。然后在那里读取数据库并填充指针。然后用 C++ 处理你的数据。

    评论

报告相同问题?

问题事件

  • 系统已结题 7月15日
  • 赞助了问题酬金50元 7月12日
  • 修改了问题 7月7日
  • 创建了问题 7月7日

悬赏问题

  • ¥15 如何提取csv文件中需要的列,将其整合为一篇完整文档,并进行jieba分词(语言-python)
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?