我有一个简单的html页面,其中包含一个超过2000行的大表.我为该表中的搜索和排序编写了jQuery代码.搜索和排序需要相当长的时间(这是可以理解的).
我想要的是在脚本搜索或排序表时使用屏幕拦截器.在许多网站上的AJAX调用上可以观察到这种行为,这可以通过实现jQuery的onAjaxBegin和onAjaxComplete事件来实现.
是否有任何此类方法可用于为长时间运行的脚本设置屏幕拦截器.如果没有,有什么替代方案?
最佳答案 我建议将其分解并使用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,但这对旧版浏览器不起作用(如果您正在编写浏览器扩展或者您知道用户将使用什么,这对您来说可能是也可能不是问题,等等. ).
如果按照你在问题中解释的方式进行操作,那么在计算过程中你会使浏览器完全没有响应,你很可能会触发“慢速脚本 – 你想杀死它吗?”有点警告.