HTML5 WebWorkers看起来非常有前景,但目前IE8并不支持它们。我正在建立一个业务Saas,我必须至少再支持这个浏览器2年。
如果我开始实施Web工作线程并在IE8上运行它会发生什么?它只是在单个线程上运行还是根本不起作用?
感谢。
答案 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');