2015-09-04 34 views
2

我的代碼停止轉動:spin.js在長時間運行的IE瀏覽器線程和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如上,我設法得到處理的div舉止得體即顯示然後隱藏和顯示內容的div當一切都完成了。 問題是,在IE和FF中,微調器在一段時間後停止旋轉。在Chrome中,它完美地工作,並且微調持續不斷。

我曾嘗試:

  • 迫使加工DIV
  • 的重繪使用不同的JS紡紗 - 使用CSS3動畫而非旋
  • (比spin.js行爲更糟糕,他們從來沒有出現)。 js(從不動畫)
  • 附加settimeouts
  • setintervals嘗試獲取ui重繪。

到目前爲止還沒有工作。在將我的漫長過程轉移到新的視角之後,我還能做些什麼嗎?我知道這些問題與js單線程有關,但由於chrome可以,我認爲可能有解決方案。 謝謝。

+0

您能否提供JSFiddle,以便人們更容易幫助您? – tiblu

+0

這不會是直接的,因爲包含Longrunningfunction1..n的javascript非常冗長,除非我錯過了某些東西... –

回答

1

首先我要說的是:JavaScript不是單線程的。只是在瀏覽器上,只有一個主要的UI JavaScript線程。但是,語言JavaScript幾乎沒有提到線程的概念,並且可以(並且已經)在其他環境中以多線程方式實現。

某些瀏覽器也將同一UI線程用於非JavaScript任務,看來spin.js要麼依賴於JavaScript(因爲它談論關鍵幀的東西),要麼受到主UI線程繁忙的影響。

如果可能,解決方案是將長時間運行的功能從主UI線程移到web worker。這有好處,原因很多,尤其是在工作人員正在開展工作時,您的用戶界面仍然保持響應。

在現代瀏覽器中,Web工作人員爲well supported,但在v4.4.4之前的IE8或IE9和Android瀏覽器中沒有。

+0

謝謝。我會考慮使用網絡工作者。 –

相關問題