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

spin.js stops spinning during long running thread on IE and FF

我的代码:

$(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,我设法让 Processing div 正常运行,即显示,然后在一切完成时隐藏和显示 Content div。 问题是在 IE 和 FF 中,微调器会在一段时间后停止旋转。在 Chrome 中,它运行完美,微调器继续运行。

我试过:

到目前为止没有任何效果。除了将我的长 运行 进程移动到新视图之外,还有什么我可以做的吗?我知道这些问题与 js 是单线程有关,但由于 chrome 没问题,我认为可能有解决方案。 谢谢

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

一些浏览器也使用相同的 UI 线程来执行非 JavaScript 任务,看起来 spin.js 要么依赖于 JavaScript(因为它会说话关于关键帧的东西)或者受到主UI线程繁忙的影响。

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

网络工作者在现代浏览器中是well supported,但在 IE8 或 IE9 和 v4.4.4 之前的 Android 浏览器中不是。