IE8上的javascript多线程WebWorkers

时间:2012-05-08 18:22:29

标签: javascript html5

HTML5 WebWorkers看起来非常有前景,但目前IE8并不支持它们。我正在建立一个业务Saas,我必须至少再支持这个浏览器2年。

如果我开始实施Web工作线程并在IE8上运行它会发生什么?它只是在单个线程上运行还是根本不起作用?

感谢。

2 个答案:

答案 0 :(得分:6)

您将收到错误,因为用于创建Web Workers的API在IE中根本不存在。

e.g。

var worker = new Worker('my_task.js'); 

将抛出错误,因为未定义Worker。

如果要进行特征检测,可以在创建工作人员之前先检查:

if(window.Worker !== undefined){
   var worker = new Worker('my_task.js'); 
}

当然,您委托给Webworker的任何任务都不会发生在不受支持的浏览器上,这意味着您需要在主(非工作者)上下文中运行逻辑。

由于您向WebWorkers发送消息(并侦听事件/消息),如果您对工作任务采用相同的方法,则可以在主要上下文中运行它,并以与您相同的方式调用它如果它是一个网络工作者会。这将需要一些额外的工作,但这样您可以在检测到WebWorkers时轻松切换到WebWorkers。

答案 1 :(得分:5)

有一个项目为IE提供虚拟的Web工作者实现< 10:http://code.google.com/p/ie-web-worker/ API与之相同,但执行是单线程的。

它工作正常,但我发现有关此lib的一个问题。

后立即执行worker的代码
var worker = new Worker('myworker.js');

被调用。此刻没有

worker.onmessage = function {...}

已设置,并且无法从工作程序向主代码发送消息。因此,可能有必要在从主代码向工作人员发送消息之前启动工作代码,例如

worker.postMessage('start');