我以前在內部應用程序中處理過這個問題,他們不關心瀏覽器需要多長時間才能關閉數據,他們只是不想點擊提示。
的關鍵是向下打破工作成工作的相對可預測的塊(預測的在CPU時間而言)和在類似的setInterval運行它們:
function doWork(begin, end) {
// Some chunk of what your worker function normally does from begin to end
if (actualEnd < end) // Nothing left to do
clearInterval(Interval);
}
var Interval = setInterval(doWork, 15);
這防止了IE提示出現(或Chrome提供「凍結」對話框)。下一步是添加一些代碼,讓用戶完全跳過它;如果一開始就知道工作量,馬上詢問他們。如果沒有,開始處理,並在n個塊後問他們是否想要做更便宜的功能。
有2個着手完成這麼多的工作,其他的選項:
- 向前看,以有多少工作要做,如果這是一個很大,它傳遞到服務器(這不幸的是手段再次在服務器上編寫JS;當然,您可以使用運行Javascript的服務器引擎來節省自己的一些編碼)。
- 從谷歌齒輪/ HTML5
使用背景工人
最後,如果你正在做的按需這麼多的工作,也有在工作中你可能執行的速度向上的機會 - 該數據可以事先建立索引在服務器上使計算更快更簡單,就像那樣。但我不知道你在計算什麼。
你可以有一個單獨的函數,定期檢查工作是否實際上正在繼續 – JohnP 2011-04-18 09:02:00
在標準的JS你實際上不能;工作是以單線程的方式同步執行的,因此單獨的函數在第一個完成之後纔會運行,這就太遲了。 – 2011-04-19 00:39:31