2016-06-22 43 views
1

我有4個數值Javascript數組,這些被稱爲latitude_array,longitude_array,camera_angle_array和time_array。發送多個數組到web worker - >無法克隆對象

我只是想將這些傳遞給網絡工作者,對它們進行一些處理並檢索它們。

我發現有一個與我目前的做法,這是用來發送的數組中的巨大的開銷:

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

然後從網絡工作者檢索它們相反。

我想用轉換對象,而不是過度傳遞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中我得到錯誤「的對象無法克隆」。

的網絡工作者試圖利用檢索數組:

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

我怎樣才能通過這4門陣列(並讓他們回)從一個網絡工作者?

+1

你可以請你分享你的JS文件映射到工人? –

+0

我已經添加了這個,雖然我相信這個錯誤可能是在調用過程中造成的 –

回答

0

你不需要附加'消息'事件的事件處理程序。它是默認處理的。

通過查看您的代碼,我所瞭解的是您試圖創建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獲取傳遞的數據。再從這裏我們使用postMessage將數據發送給消費者。

現在這個時候,我們必須傾聽工人對象上onmessage事件像my.onmessage

你可以閱讀更多from here

UPDATE:

docs

數據的主要之間傳遞頁面和工作人員被複制,而不是共享。對象在交給工作人員時序列化,然後在另一端解除序列化。頁面和工作人員不共享同一個實例,所以最終的結果是在每一端創建一個副本。大多數瀏覽器都將此功能作爲結構化克隆來實現。

+0

恐怕這就是我已經在做的事情,並且這不是使用Transferable Objects,它根據我的理解克隆數組,是我的開銷是我想要避免的地方 –

+0

請檢查更新 –

+0

是的,我意識到這一點,這就是我首先提出問題的原因。可轉移對象顯然不以這種方式工作。我需要知道如何使用Transferable Object來傳遞數據。 –