我们尝试通过 ChromeWoker 发送 500kb 并在控制台中出现内存不足错误。
这段代码:
let charArray= ctypes.ArrayType(ctypes.char);
let base641 = new charArray(9999999);
var {ChromeWorker} = Cu.import("resource://gre/modules/Services.jsm", null);
var chworker = new ChromeWorker(self.data.url("async.js"));
chworker.onmessage = function(e){
console.error(e.data);
};
chworker.postMessage(base641);
返回错误:
stack:"@undefined:undefined:undefined
CuddlefishLoader/options<.load@resource://gre/modules/commonjs/sdk/loader/cuddlefish.js:129:9
run@resource://gre/modules/commonjs/sdk/addon/runner.js:169:9
startup/<@resource://gre/modules/commonjs/sdk/addon/runner.js:113:7
Handler.prototype.process@resource://gre/modules/Promise-backend.js:863:11
this.PromiseWalker.walkerLoop@resource://gre/modules/Promise-backend.js:742:7"
什么是未定义的?我们可以通过 ChromeWorker 设置指向内存的指针吗?
最佳答案
要传递 ctypes
数组,您需要获取 address()
并将其发布到消息中,并从另一端的该地址构造另一个指针。这当然有效,但相当讨厌。您还需要确保垃圾收集不会在另一端仍在使用它时收集东西!
您可能最好使用 ArrayBuffer
/typed 数组,您可以 pass directly ,也来自非特权代码。
关于javascript - ChromeWorker 设置指向内存的指针或发送大数据。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23911536/