2011-03-17 57 views
4


我有一個簡單的html頁面,其中包含一個包含超過2000行的大表。我有jQuery代碼編寫的搜索和排序在該表中。搜索和排序需要相當長的時間(這是可以理解的)。我想要的是當腳本正在搜索或排序表時有一個屏幕攔截器。這種行爲可以在許多網站上的Ajax調用中觀察到,這可以通過實現jQuery的onAjaxBegin和onAjaxComplete事件來實現。有沒有這樣的方法可以用來放置長時間運行的腳本的屏幕截圖。如果不是,還有什麼選擇?任何建議高度讚賞
問候長時間運行腳本的屏蔽器

回答

2

我會建議分解它並迭代setTimeout。

例如,而不是:

function example1() { 
    for (var i = 0; i < 1000; i++) { 
     // SOME CODE 
    } 
} 

你可以寫:

function example2() { 
    var i = 0; 
    helper(); 
    function helper() { 
     // SOME CODE 
     if (++i < 1000) { 
      setTimeout(helper, 0); 
     } 
    } 
} 

您不必在不同的回調每次迭代。您可以將1次函數調用中的1000次迭代轉換爲100次函數調用中每次函數調用的10次迭代,或者在您的情況下最適合的函數調用。這個想法是不會阻止用戶界面很長時間,以至於用戶會注意到。

如果可以的話,另一個想法是使用Web Workers,但在舊版本的瀏覽器上無法使用(如果您正在編寫瀏覽器擴展,或者您知道用戶將會使用等)。

如果按照您在問題中解釋的方式進行操作,那麼您在計算期間將使瀏覽器完全無響應,並且很可能會觸發「慢速腳本 - 您想要殺死它嗎?」一種警告。

+0

這是一個好主意。我一定會試一試 – 2011-03-17 05:45:00