webworker.swc
1.0.0
模仿HTML5 風格的Flash Worker,方便JS 程序移植到AS,用於低版本瀏覽器的密集計算。
主程序通過WebWorker創建子程序。 (傳入子程序SWF 文件的ByteArray)
子程序通過繼承WebWorkerContext可獲得message事件、 postMessage方法等特性。
注意:SDK 版本需11.5 或更高。
postMessage方法沒有HTML5 中Transferable objects 的概念。可共享变量通過setSharedObject 、 getSharedObject方法傳遞。
WebWorker類增加了一個tag屬性,方便關聯一些信息。 (Flash 的類是密閉的,無法添加額外屬性,只能通過子類或者Dictionary 關聯信息,比較麻煩)
WebWorker創建後就可以postMessage ,程序會暫時將消息記錄在隊列裡,子程序初始化完成後會收到。
增加了isMainThread靜態方法,可判斷當前是否為主程序,方便主程序和子程序共用一個SWF 文件。
// Startup.as
public class Startup extends Sprite {
...
public function Startup () {
if (WebWorker . isMainThread()) {
new Main( loaderInfo . bytes ) ;
} else {
new Child() ;
}
}
}
// Main.as
public class Main {
...
public function Main ( workerBytes : ByteArray ) {
var worker : WebWorker = new WebWorker(workerBytes) ;
worker . addEventListener ( 'message' , msgHander) ;
worker . postMessage( 'hello' ) ;
}
private function msgHander ( e : WebWorkerEvent ) : void {
var msg : * = e . data ;
trace ( 'msg from worker:' , msg) ;
}
}
// Child.as
public class Child extends WebWorkerContext {
public function Child () {
addEventListener ( 'message' , msgHander) ;
}
private function msgHander ( e : WebWorkerEvent ) : void {
var msg : * = e . data ;
trace ( 'msg from main:' , msg) ;
postMessage(msg + ' world' ) ;
}
}https://github.com/EtherDream/WebScrypt/tree/master/src/mod_flash/src