2013-06-04 123 views
1

我有一個數組,我需要從WebWorker傳輸回主線程。據我所知,只有ArrayBuffers和TypedArrays是可轉移的,其他任何東西都被複制而不是傳輸。WebWorker - 傳輸包含對象的數組

問題我遇到的是數組包含對象,所以我不知道如何傳輸它們(這是由於巨大的尺寸需要的)。

例如,假設我有:

function something() { 
    this.x = 1; 
    this.y = 2; 
    this.z = 3; 
} 

var array = []; 
for (var x = 0; x < 6; x++) { 
    array[x] = new something(); 
} 

有沒有一種方法,我可以在陣列轉換成ArrayBuffer,將其傳送然後再轉換回來?

感謝您的幫助!

回答

0

創建對象時,請考慮爲數組的每個元素(對象?)發佈內容。然後將它放在onmessage處理程序中的一個數組中。

function something() { 
    this.x = 1; 
    this.y = 2; 
    this.z = 3; 
} 

var array = []; 
for (var x = 0; x < 6; x++) { 
    postMessage(new something()); 
} 

這應該適用於簡單的對象,就像樣本中的那個一樣,但您必須測試邊界。

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

MDN: Passing Data

相關問題