小编Nag*_*mon的帖子

在chrome扩展中使用WebAssembly

我有一个chrome扩展,包括一个复杂的功能comp_func(data),通过执行许多按位操作需要大量的CPU.因此,我正在尝试使用WebAssembly.

我已经尝试过几个教程,例如这个教程.

第一个链接说:

fetch('simple.wasm').then(response =>
  response.arrayBuffer()
).then(bytes =>
  WebAssembly.instantiate(bytes, importObject)
).then(results => {
  results.instance.exports.exported_func();
});
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

未捕获(承诺)TypeError:WebAssembly实例化:导入#0 module ="env"错误:模块不是对象或函数

我已经尝试了很多使用这种方法,但它没有用.我无法理解如何使用从.wasm文件加载的WebAssembly .

所以我尝试了一种更简单的方法:第二个链接说将该行放在html文件中:

<script src="index.js"></script>
Run Code Online (Sandbox Code Playgroud)

然后只使用导出的函数:

var result = _roll_dice();
Run Code Online (Sandbox Code Playgroud)

但是,我正在扩展所以我只有一个background.html文件.所以我正在寻找一种方法来访问后台文件中加载的模块.事情变得复杂,因为函数comp_func(data)是从Worker调用的.

这是我到目前为止所尝试的:

如果我打电话,chrome.extension.getBackgroundPage()我可以访问模块,但我无法将其发送给工人:

无法在'Worker'上执行'postMessage':#无法克隆.

如果我先尝试一下stringify:

未捕获的TypeError:将循环结构转换为JSON

(我试图解开它,没有用......)

我无法chrome.extension.getBackgroundPage()从工作人员打电话,因为我无法从那里访问chrome API.

所以我的问题是:

  1. 有人厌倦了加载.wasmchrome扩展文件并且它有效吗?第二种方法(加载js文件)听起来更简单,但如果你有一个这种方法的工作示例,它将是伟大的.

或2.如何访问已加载的模块background.html(从第二个示例)?

或者3.如何将我需要的函数从js文件传递给Worker(via postMessage)?

总结一下,有人试图在chrome扩展中使用WebAssembly并幸存下来吗?

编辑:我最终离开了WebAssembly的方法.我也在bugs-chromium发布了这个问题,几个月后得到了答案.不确定这是否真的有效,但也许这一点,以及明确的答案,将有助于某人.

javascript web-worker google-chrome-extension webassembly

12
推荐指数
1
解决办法
3204
查看次数

python约束 - 约束金额

我有一个约束问题,我试图用python-constraint解决

所以假设我有3个位置: loc1,...loc3

另外,我有7个设备: device1,...device7

每个位置的最大设备数量:( loc1:3, loc2:4, loc3:2 例如最多3个设备loc1等等......)

以及有关位置和设备的一些限制:

loc1: device1, device3, device7,

loc2: device1, device3, device4, device5, device6, device7

loc3: device2, device4, device5, device6

(仅作为示例device1,device3device7可以是loc1.)

我正在尝试为位置设备提供一组可能的选项.

    from constraint import *
    problem = Problem()
        for key in locations_devices_dict:
           problem.addVariable(key,locations_devices_dict[key])
           # problem.addVariable("loc1", ['device1', 'device3', 'device7'])
   problem.addConstraint(AllDifferentConstraint())
Run Code Online (Sandbox Code Playgroud)

我一直坚持如何做约束.我试过了:

problem.addConstraint(MaxSumConstraint(3), 'loc1')
Run Code Online (Sandbox Code Playgroud)

但它不起作用,MaxSumConstraint不总结我需要的东西.

所有设备必须放在某处

解决方案:

loc1: device1, device3
loc2: device4, device6, device7
loc3: device2, device5
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

(另一个python包/不使用任何包,如果有人有任何建议也是个好主意...)

python constraints constraint-programming

5
推荐指数
1
解决办法
467
查看次数