我有一个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.
所以我的问题是:
.wasmchrome扩展文件并且它有效吗?第二种方法(加载js文件)听起来更简单,但如果你有一个这种方法的工作示例,它将是伟大的.或2.如何访问已加载的模块background.html(从第二个示例)?
或者3.如何将我需要的函数从js文件传递给Worker(via postMessage)?
总结一下,有人试图在chrome扩展中使用WebAssembly并幸存下来吗?
编辑:我最终离开了WebAssembly的方法.我也在bugs-chromium发布了这个问题,几个月后得到了答案.不确定这是否真的有效,但也许这一点,以及明确的答案,将有助于某人.
我有一个约束问题,我试图用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,device3也device7可以是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包/不使用任何包,如果有人有任何建议也是个好主意...)