2012-03-05 81 views
1

我一直在閱讀HTML 5工作線程,但我所看到的所有示例似乎都需要JavaScript在它自己的文件中。HTML 5工作「線程」,產生功能

所以即時通訊基本上想知道它是否可以啓動一個員工直接工作的功能。

的最終目標是在這裏的線沿線的東西:

function AllJavascriptIsLoaded() 
{ 

if(gWorkersSupported) 
{ 

     var Worker = new Worker(MyFunc) 

     Worker.Start(); 
    } 
    else 
    { 
     // Horrible user experience incomming. 
     MyFunc(); 
    } 
} 

function MyFunc() 
{ 
    // Complex and time consuming tasks 
} 
+0

如果這些例子在自己的文件中需要js,爲什麼要擔心呢?把JS放在自己的文件中。 '直接爲功能而努力'是什麼意思?作爲程序員,這對我來說沒有任何意義。 – 2012-03-05 13:34:25

+0

這將需要一個大的重寫,例如我想在一名工作人員中運行datatables.net。但沒有大的改寫顯然不可能 – EKS 2012-03-05 13:41:28

+0

好吧,但不是工作人員'給它一個任務,並在它返回時使用它的輸出'的重點所以你不能構造使用這個工人的東西(也許你應該構造它們)模型?你不能在DOM上使用工作人員的UI,但是如果他們需要使用工作人員大量繁重的工作,並且在他們完成構建之後用主線程提供服務,你可以預緩存UI視圖。所以你得到高性能的複雜用戶界面。這對你有可能嗎? – 2012-03-06 05:30:59

回答

1

據我所知,這是不允許出於安全原因。我假設一個子對象或同一個文件中的任何JS腳本可能有權訪問父DOM窗口,哪些Web Workers不允許訪問。

所以,我們堅持用,除非有人發現了一個更好的辦法做到這一點的消息張貼到其他文件;)

1

可以使用一種叫做inline-worker

基本上,您通過dataURI或BlobURL爲工作腳本創建腳本資源。考慮到可以生成腳本的內容,您可以使用Function.toString()來構建工作人員的內容。

實施例使用BlobURL:http://www.html5rocks.com/en/tutorials/workers/basics/
實施例使用兩種技術:https://github.com/jussi-kalliokoski/sink.js/blob/master/src/core/inline-worker.js

傑弗裏是右大約WebWorker的安全限制。在worker中運行的代碼不能訪問DOM,所以它只能用於計算繁重的任務。如果您嘗試訪問工作人員代碼中的DOM,則會引發錯誤。

1

vkThread插件可以幫助你實現你所要求的。

看看http://www.eslinstructor.net/vkthread/

有不同的類型的函數的例子:定時功能,與上下文功能,具有依賴性的,匿名的,拉姆達。