Javascript 在IE和FF上长时间运行线程期间,spin.js停止旋转

Javascript 在IE和FF上长时间运行线程期间,spin.js停止旋转,javascript,jquery,spin.js,Javascript,Jquery,Spin.js,我的代码: $(document).ready(function () { $("#divContent").hide(); $("#divProcessing").spin(); $("#divProcessing").show(); setTimeout(function () { Longrunningfunction1 Longrunningfunction2 Longrunningfunctionn

我的代码:

$(document).ready(function () {
    $("#divContent").hide();
    $("#divProcessing").spin();

    $("#divProcessing").show();

    setTimeout(function () {
        Longrunningfunction1
        Longrunningfunction2
        Longrunningfunctionn

        //All done
        $("#divProcessing").hide();
        $("#divContent").show();
        $("#divContent").style = "margin-top:60px;height:100%;display:''";

        $("#tabbed-nav").data('zozoTabs').refresh();
    }, 0);
});
如上所述,使用SetTimeout,我成功地使处理div正常工作,即show,然后在完成所有操作后隐藏和显示Content div。 问题是在IE和FF中,旋转器在一段时间后停止旋转。在铬合金中,它工作完美,旋转器继续运转

我试过:

  • 强制重新绘制处理div
  • 使用不同的js微调器(比spin.js更糟糕的行为-它们从未出现)
  • 使用css3动画而不是spin.js(从不设置动画)
  • 附加设置超时
  • 设置间隔以尝试重新绘制ui
到目前为止,一切都不起作用。除了将我长期运行的进程移到一个新的视图之外,还有什么我可以做的吗?我知道这些问题与js是单线程有关,但既然chrome还可以,我想可能有一个解决方案。 谢谢。

首先我通常要说的是:JavaScript不是单线程的。只是在浏览器上,只有一个主UI JavaScript线程。但是JavaScript语言在线程的概念上几乎是沉默的,并且可以(并且已经)在其他环境中以多线程的方式实现

一些浏览器在非JavaScript任务中也使用相同的UI线程,spin.js似乎要么依赖JavaScript(因为它谈论关键帧内容),要么受到主UI线程繁忙的影响

如果可能的话,解决方案是将长时间运行的函数从主UI线程移动到一个新的UI线程中。这有很多好处,尤其是在工作人员工作时,您的UI保持响应


Web workers使用的是现代浏览器,但不是IE8或IE9以及v4.4.4之前的Android浏览器。

你能提供JSFIDLE让人们更容易帮助你吗?这不是直截了当的,因为包含Longrunningfunction1..n的javascript非常长,除非我遗漏了什么。。。