2011-03-17 79 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