我有一些javascript / jquery代码(对于内部网站),它在大型表上进行了大量的客户端处理。它运行得有点慢,但没关系。
问题是它在运行它需要做的循环时会冻结浏览器。这有两个不受欢迎的影响:
有没有办法可以在代码中使用某种“呼吸”语句,这样每次(比如说)100次迭代,它会暂停让旋转器旋转,浏览器知道脚本仍在使用它?像(伪代码):
for (i=0;i<20000;i++)
{
fnProcessRow();
if (i % 100 == 0) breath();
}
答案 0 :(得分:1)
分解你的javascript的一种方法是将你的处理分成块并使用setTimeout()来执行下一个&#34; chunk&#34;
如果您需要一些代码来告诉我我的意思,请告诉我。
答案 1 :(得分:1)
没有设置方法,因为它非常依赖于您的代码。像这样的东西会起作用:
fnProcessRows(0, 10000);
function fnProcessRows(start, end) {
/* do row processing */
if (end < totalRows) {
setTimeout(function () {
fnProcessRows(start + 10000, end + 10000);
}, 1000);
}
});
这将处理10000行,中间间隔一秒。这可能具有潜在的奇怪副作用,例如用“未处理”行显示“已处理”行,这可能是不合需要的。如果不是,那么这应该是一个非常简单的解决方案来帮助。
如果仍然没有响应,你当然可以将10000减少到其他东西;它应该在很短的时间内没有响应,用户很难注意到。
答案 2 :(得分:0)
请参阅this question。
如果您不想使用setTimeout / setInterval路由,请尝试添加:
if (i % 100) { $("selector for your animated image").width(); }
在一些(大多数?)浏览器上强制它重新布局和渲染。