26 六月, 2009 21:13
[Firefox 3.5 preview] web worker thread
由 Fillano(馮旭平) 發表於 [ Javascript學習日誌 ](1358) 閱讀, (0) 引用, (2) 回應 ,
推文( 0 )
Firefox 3.5 RC剛剛出來,在他的 Release Note 裡面提到了一些新的功能,包含native JSON support以及web worker thread這兩個新的javascript功能。(另外,透過安裝addon,還可以支援canvas 3d)
如果熟悉Javascript,應該就知道他是single thread的。現在透過web worker,可以讓javascript擁有一些真正多工的能力(根據說明,他會使用到系統層級的thread)。
雖然web worker使用上有一些限制,例如每次要新增一個worker,都可能會有網路的loading,不過適當地使用還是對效率有所幫助。
使用上有幾個地方要先注意:
- worker執行的環境是一個完全獨立的context,這個context裡面的Global物件幾乎沒什麼東西,只包含了onmessage事件屬性用來指定事件處理函數,以及postMessage用來回傳資料並觸發worker物件的onmessage事件。
- worker物件有同樣有onmessage屬性,指定給他的事件處理函數會在worker載入的Javascript執行中呼叫postMessage時被觸發,而postMessage方法則可以觸發載入的Javascript中的onmessage。
- 根據Mozilla的文件說明,透過postMessage傳遞的資料,會先轉成JSON再轉回成物件,並不是直接把一個物件的參考傳入,所以針對接收到的物件所作的修改,對傳入的物件完全不會有作用。
- 簡單地說,在worker所載入執行的Javascript裡面,完全無法操控DOM,能做的只有接收傳進來的資料並傳回處理過的結果。

