javascript - 向 Web Worker 发送多个数组 -> 无法克隆对象

标签 javascript

我有 4 个数字 Javascript 数组,分别称为 latitude_array、longitude_array、camera_angle_array 和 time_array。

我只是希望将这些传递给网络 worker ,对它们进行一些处理并检索它们。

我发现我当前的方法存在巨大的开销,即使用以下方式发送数组:

var arrays_to_pass = [latitude_array, longitude_array, camera_angle_array, time_array];
thin_data_worker.postMessage(arrays_to_pass);

然后反过来从网络 worker 那里检索它们。

我想使用可传输对象来将 4 个数组传递给工作人员并让它们返回以加快速度。

但是,我显然不了解网络 worker ,因为我尝试执行以下操作:

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 中我收到错误“无法克隆对象”。

网络 worker 正在尝试使用以下方式检索数组:

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;
)};

我如何从网络 worker 那里传递这 4 个数组(并取回它们)?

最佳答案

您不需要为“消息”事件附加事件处理程序。默认情况下会处理它。

通过查看您的代码,我了解到您试图创建 dedicated worker .

按照这个方法就可以了。

首先创建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事件并使用fromConsumer.data等参数获取传递的数据。再次从这里我们使用将数据发送给消费者发布消息

现在,我们已经监听了工作对象上的 onmessage 事件,例如 my.onmessage

您可以阅读更多from here

更新:

来自docs

Data passed between the main page and workers is copied, not shared. Objects are serialized as they're handed to the worker, and subsequently, de-serialized on the other end. The page and worker do not share the same instance, so the end result is that a duplicate is created on each end. Most browsers implement this feature as structured cloning.

关于javascript - 向 Web Worker 发送多个数组 -> 无法克隆对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37965776/

相关文章:

javascript - beginPath() 和 closePath() 究竟做了什么?

javascript - Ionic 2/3 - 如何在屏幕较宽时查看 2 张幻灯片?

javascript - "Clipping"背景在堆叠上下文中看到自身下方

php 中的 JavaScript 函数可显示更多点击信息(数据库查询)

javascript - 像 facebook 一样只在通知 div 中滚动,而不是在 body 中滚动

javascript - 必应 map 。我如何通过纬度和经度获取地址?

javascript - 如何延迟基本的 HTML 工具提示?

javascript - 如何获取浏览器的滚动条大小?

javascript - 在模式中显示 Google AdSense 广告

javascript - 未定义=真;然后回到未定义?