长时间运行的脚本上的屏幕截屏

时间:2011-03-17 05:05:11

标签: javascript jquery javascript-events

我有一个简单的html页面,其中包含一个超过2000行的大表。我为该表中的搜索和排序编写了jQuery代码。搜索和排序需要相当长的时间(这是可以理解的)。

我想要的是在脚本搜索或排序表时使用屏幕拦截器。在许多网站上的AJAX调用上可以观察到这种行为,这可以通过实现jQuery的onAjaxBegin和onAjaxComplete事件来实现。

是否有任何此类方法可用于为长时间运行的脚本设置屏幕拦截器。如果没有,有什么替代方案?

2 个答案:

答案 0 :(得分: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,但这对旧版浏览器不起作用(如果您正在编写浏览器扩展程序或者您知道用户将使用什么,这对您来说可能是也可能不是问题等等。)。

如果按照您在问题中解释的方式执行此操作,那么您将在计算过程中使浏览器完全无响应,并且您很可能会触发“慢速脚本 - 您想要杀死它吗?”那种警告。

答案 1 :(得分:0)

jQuery blockUI将阻止元素或页面,并且可以自定义。