2012-03-05 79 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/

有不同的类型的函数的例子:定时功能,与上下文功能,具有依赖性的,匿名的,拉姆达。