问题 iframe是否与所有者在同一个线程上运行?


我有一项CPU密集型工作要做,我不想降低用户体验。自网络工作者(http://ejohn.org/blog/web-workers/)是一个新功能,并不是所有浏览器都支持,我想打开一个带有HTML + JS的iframe,它将执行所有脏工作并使用一些跨域通信来传递结果。 不幸的是,我注意到iframe的所有者遭受了iframe窗口的CPU工作。

这种行为是否符合设计?有办法解决这个问题吗?


9684
2017-09-19 19:10


起源



答案:


一种模拟多线程的方法是让Javascript函数做一些工作,然后调用 setTimeout 具有相同的功能;然后该功能将做一些工作和调用 setTimeout 再次,这个循环将永远持续或直到他们关闭框架或你发出信号停止工作。 MDN有一个很好的例子来说明如何设置它。 

在超时之间,Javascript不应占用任何处理器时间。你可能需要玩一下才能看出你的超时时间应该是多长时间 - 1ms可能太短了,但1s绝对太长了。另一个因素是运行作业的计算机的处理器速度,因此您可能需要通过Javascript在客户端进行一些伪基准测试,然后才能确定每次延迟的时间。


8
2017-09-19 19:21



w3schools!= W3C - James M.
我推荐16ms是屏幕刷新。 - Fresheyeball


答案:


一种模拟多线程的方法是让Javascript函数做一些工作,然后调用 setTimeout 具有相同的功能;然后该功能将做一些工作和调用 setTimeout 再次,这个循环将永远持续或直到他们关闭框架或你发出信号停止工作。 MDN有一个很好的例子来说明如何设置它。 

在超时之间,Javascript不应占用任何处理器时间。你可能需要玩一下才能看出你的超时时间应该是多长时间 - 1ms可能太短了,但1s绝对太长了。另一个因素是运行作业的计算机的处理器速度,因此您可能需要通过Javascript在客户端进行一些伪基准测试,然后才能确定每次延迟的时间。


8
2017-09-19 19:21



w3schools!= W3C - James M.
我推荐16ms是屏幕刷新。 - Fresheyeball


JavaScript是单线程的。根据浏览器的不同,单独的选项卡或窗口可以在单独的线程或进程中运行,但是您无法在这些窗口之间进行通信,因此您无法在JavaScript中显式使用多个线程或进程。

如果这是一个UI响应的问题,Rushakoff有一个很好的答案。在JavaScript运行时,不会发生HTML呈现,并且UI没有响应。通过使用超时,可以定期将控制释放回渲染/ UI线程,从而提供更具响应性的感觉,即使它仍然只运行单线程。


4
2017-09-19 19:13



>但是你无法在这些窗口之间进行通信 postMessage - Eli Grey