Javascript 向web worker发送多个阵列->;无法克隆该对象

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

我有4个数字Javascript数组,它们被称为,纬度数组,经度数组,相机角度数组和时间数组

我只是希望将这些信息传递给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个数组传递给工作人员,并将其返回以加快速度

然而,我显然不了解网络工作者,因为我试图做以下工作:

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文件吗?我添加了这个,虽然我相信错误可能是在调用过程中造成的。我恐怕这是我正在做的,这不是使用可转移对象,而是克隆我所理解的数组,这就是我的开销,我想避免我意识到这一点,这就是我首先提出问题的原因。可转移对象显然不是这样工作的。我需要知道如何使用可转移对象来传递数据。我恐怕这是我已经在做的事情,而这不是使用可转移对象,按照我的理解是克隆数组,这就是我的开销所在,我想避免我意识到这一点,这就是我首先提出问题的原因。可转移对象显然不是这样工作的。我需要知道如何使用可转移对象来传递数据。