我有一個CPU密集型工作要做,我不想降低用戶體驗。由於網絡工作者(http://ejohn.org/blog/web-workers/)是一項新功能,並且不被所有瀏覽器支持,我以爲可以使用HTML + JS打開一個iframe,它將完成所有骯髒的工作,並使用一些跨域通信傳遞結果。 不幸的是我注意到iframe的所有者患有iframe窗口的CPU工作。iframe是否與所有者在同一個線程上運行?
此行爲是否按設計?有沒有辦法解決這個問題?
我有一個CPU密集型工作要做,我不想降低用戶體驗。由於網絡工作者(http://ejohn.org/blog/web-workers/)是一項新功能,並且不被所有瀏覽器支持,我以爲可以使用HTML + JS打開一個iframe,它將完成所有骯髒的工作,並使用一些跨域通信傳遞結果。 不幸的是我注意到iframe的所有者患有iframe窗口的CPU工作。iframe是否與所有者在同一個線程上運行?
此行爲是否按設計?有沒有辦法解決這個問題?
一種模擬多線程的方法是讓Javascript函數做一點工作,然後用setTimeout
調用相同的函數;那麼該功能將會做一些工作,並再次呼叫setTimeout
,並且這個循環會一直持續下去,或者直到它們關閉幀或者您發出信號停止工作。 MDN has a good example of how to set this up.
在超時之間,Javascript不應該消耗任何處理器時間。您可能需要稍微玩一下,看看您的超時時間應該多長 - 1毫秒可能太短,但1秒肯定會太長。另一個因素是計算機運行該作業的處理器速度,因此您可能需要通過Javascript在客戶端執行一些僞基準測試,然後才能確定每次延遲多長時間。
JavaScript是單線程的。單獨的選項卡或窗口可能在單獨的線程或進程中運行,具體取決於瀏覽器,但是無法在這些窗口之間進行通信,因此您無法在JavaScript中明確使用多個線程或進程。
如果這是一個UI響應問題,Rushakoff有一個很好的答案。在JavaScript運行時,不會發生HTML呈現,並且UI不響應。通過使用超時,控制可以定期釋放回渲染/ UI線程,從而給出更快的響應感,即使它仍然只運行單線程。
>但是你不能在這些窗口之間進行通信 'postMessage' – 2009-10-14 20:26:32
w3schools!= W3C – 2009-09-19 20:19:51
16ms是屏幕刷新,我推薦。 – Fresheyeball 2013-08-08 18:32:38