HTML5 WebWorkers 看起来很有前途,但目前 IE8 不支持它们。我正在建立一个商业 Saas,我必须至少再支持这个浏览器 2 年。
如果我开始实现一个 Web 工作线程并在 IE8 上运行它会发生什么?它会只在单个线程上运行还是根本不起作用?
谢谢。
HTML5 WebWorkers 看起来很有前途,但目前 IE8 不支持它们。我正在建立一个商业 Saas,我必须至少再支持这个浏览器 2 年。
如果我开始实现一个 Web 工作线程并在 IE8 上运行它会发生什么?它会只在单个线程上运行还是根本不起作用?
谢谢。
你会得到一个错误,因为用于创建 Web Workers 的 API 在 IE 中根本不存在。
例如
var worker = new Worker('my_task.js');
会抛出错误,因为 Worker 未定义。
如果要进行特征检测,可以在创建worker前先检查:
if(window.Worker !== undefined){
var worker = new Worker('my_task.js');
}
当然,您委派给 webworker 的任何任务都不会在不受支持的浏览器上发生,这意味着您需要在主(非 worker)上下文上运行逻辑。
由于您向 WebWorkers 发布消息(并侦听来自 WebWorkers 的事件/消息),如果您对工作任务执行相同的方法,您可以在主上下文中运行它,并以与它相同的方式调用它是一名网络工作者。这将需要您做一些额外的工作,但这样您可以在检测到浏览器支持时轻松切换到 WebWorkers。
有一个项目为 IE < 10 提供 Web Worker 的虚拟实现:http ://code.google.com/p/ie-web-worker/ API 相同,但执行是单线程的。
它工作正常,但我发现了一个关于这个库的问题。worker 的代码一旦被执行
var worker = new Worker('myworker.js');
叫做。此刻没有
worker.onmessage = function {...}
已设置并且消息无法从工作人员发送到主代码。因此,可能有必要在从主代码向工作人员发送消息之前启动您的工作人员代码,例如
worker.postMessage('start');