Javascript 向web worker发送多个阵列->;无法克隆该对象
我有4个数字Javascript数组,它们被称为,纬度数组,经度数组,相机角度数组和时间数组 我只是希望将这些信息传递给web工作者,对它们进行一些处理并检索它们 我发现我目前的方法存在巨大的开销,即使用以下方式发送阵列:Javascript 向web worker发送多个阵列->;无法克隆该对象,javascript,Javascript,我有4个数字Javascript数组,它们被称为,纬度数组,经度数组,相机角度数组和时间数组 我只是希望将这些信息传递给web工作者,对它们进行一些处理并检索它们 我发现我目前的方法存在巨大的开销,即使用以下方式发送阵列: var arrays_to_pass = [latitude_array, longitude_array, camera_angle_array, time_array]; thin_data_worker.postMessage(arrays_to_pass); sel
var arrays_to_pass = [latitude_array, longitude_array, camera_angle_array, time_array];
thin_data_worker.postMessage(arrays_to_pass);
self.addEventListener('message', function(e) {
var latitude_array = e.data.latitude;
var longitude_array = e.data.longitude;
var camera_angle_array = e.data.camera_angle;
var time_array = e.data.time;
)};
然后反过来从web worker检索它们
我想使用可转移对象将4个数组传递给工作人员,并将其返回以加快速度
然而,我显然不了解网络工作者,因为我试图做以下工作:
var object = {latitude:latitude_array, longitude:longitude_array, camera_angle:camera_angle_array,time:time_array};
thin_data_worker.postMessage(object, [object.latitude, object.longitude, object.camera_angle, object.time]);
但是在Firefox中,我得到一个错误“对象无法克隆”
web工作人员正在尝试使用以下方法检索阵列:
var arrays_to_pass = [latitude_array, longitude_array, camera_angle_array, time_array];
thin_data_worker.postMessage(arrays_to_pass);
self.addEventListener('message', function(e) {
var latitude_array = e.data.latitude;
var longitude_array = e.data.longitude;
var camera_angle_array = e.data.camera_angle;
var time_array = e.data.time;
)};
如何从web worker传递这4个数组(并将其取回)?您不需要为“message”事件附加事件处理程序。默认情况下,它已处理 通过查看您的代码,我了解到您正在尝试创建 你可以这样做 首先创建worker.js文件并存储它 这是worker.js
onmessage = function(fromConsumer){
console.log(fromConsumer.data); //Will print the passed array
postMessage("I am sending the data to consumer.");
}
然后从创建辅助对象的脚本中创建辅助对象
var my = new Worker('path_to_worker_js/worker.js');
my.postMessage([1,2,4]); // sending the array
my.onmessage = function(dataFromWorker){
console.log(dataFromWorker); //From consumer
}
在这个脚本中,
您创建了my
对象,并使用postMessage
方法发送数据。
然后在worker.js中,我们监听onmessage
事件,并使用参数从consumer.data
获取传递的数据。我们再次从这里使用postMessage
将数据发送给consumer
现在,我们已经在worker对象上侦听了onmessage
事件,如my.onmessage
你可以读更多
更新:
从
主页和辅助页之间传递的数据是复制的,而不是共享的。对象在传递给工作对象时被序列化,然后在另一端反序列化。页面和辅助对象不共享同一实例,因此最终结果是在每一端创建一个副本。大多数浏览器将此功能实现为结构化克隆
您不需要为“消息”事件附加事件处理程序。默认情况下,它已处理 通过查看您的代码,我了解到您正在尝试创建 你可以这样做 首先创建worker.js文件并存储它 这是worker.js
onmessage = function(fromConsumer){
console.log(fromConsumer.data); //Will print the passed array
postMessage("I am sending the data to consumer.");
}
然后从创建辅助对象的脚本中创建辅助对象
var my = new Worker('path_to_worker_js/worker.js');
my.postMessage([1,2,4]); // sending the array
my.onmessage = function(dataFromWorker){
console.log(dataFromWorker); //From consumer
}
在这个脚本中,
您创建了my
对象,并使用postMessage
方法发送数据。
然后在worker.js中,我们监听onmessage
事件,并使用参数从consumer.data
获取传递的数据。我们再次从这里使用postMessage
将数据发送给consumer
现在,我们已经在worker对象上侦听了onmessage
事件,如my.onmessage
你可以读更多
更新:
从
主页和辅助页之间传递的数据是复制的,而不是共享的。对象在传递给工作对象时被序列化,然后在另一端反序列化。页面和辅助对象不共享同一实例,因此最终结果是在每一端创建一个副本。大多数浏览器将此功能实现为结构化克隆
你能分享你映射到worker的JS文件吗?我添加了这个,虽然我相信错误可能是在调用过程中造成的。你能分享你映射到worker的JS文件吗?我添加了这个,虽然我相信错误可能是在调用过程中造成的。我恐怕这是我正在做的,这不是使用可转移对象,而是克隆我所理解的数组,这就是我的开销,我想避免我意识到这一点,这就是我首先提出问题的原因。可转移对象显然不是这样工作的。我需要知道如何使用可转移对象来传递数据。我恐怕这是我已经在做的事情,而这不是使用可转移对象,按照我的理解是克隆数组,这就是我的开销所在,我想避免我意识到这一点,这就是我首先提出问题的原因。可转移对象显然不是这样工作的。我需要知道如何使用可转移对象来传递数据。