2011-04-18 125 views
7

從JavaScript我打電話給網絡方法。在IE中,如果我將一個巨大的參數傳遞給該Web方法,則會彈出一個警告「停止運行此sciprt?此頁面上的腳本正在導致Internet Explorer運行緩慢」。如何處理「此頁面上的腳本導致Internet Explorer運行緩慢」警報?

是否可以處理單擊「是」按鈕,以便如果用戶決定取消腳本執行,我可以運行一些替代腳本(在這種情況下,我的「替代」腳本包含關閉一些進度我在運行長時間腳本之前彈出)。

我已經看過很多文章解釋如何防止顯示此警報,但我不想停止顯示警報:我只是想能夠處理用戶決定停止的情況腳本執行。

+1

你可以有一個單獨的函數,定期檢查工作是否實際上正在繼續 – JohnP 2011-04-18 09:02:00

+0

在標準的JS你實際上不能;工作是以單線程的方式同步執行的,因此單獨的函數在第一個完成之後纔會運行,這就太遲了。 – 2011-04-19 00:39:31

回答

4

我以前在內部應用程序中處理過這個問題,他們不關心瀏覽器需要多長時間才能關閉數據,他們只是不想點擊提示。

的關鍵是向下打破工作成工作的相對可預測的塊(預測的在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個着手完成這麼多的工作,其他的選項:

  1. 向前看,以有多少工作要做,如果這是一個很大,它傳遞到服務器(這不幸的是手段再次在服務器上編寫JS;當然,您可以使用運行Javascript的服務器引擎來節省自己的一些編碼)。
  2. 從谷歌齒輪/ HTML5
  3. 使用背景工人

最後,如果你正在做的按需這麼多的工作,也有在工作中你可能執行的速度向上的機會 - 該數據可以事先建立索引在服務器上使計算更快更簡單,就像那樣。但我不知道你在計算什麼。