2012-10-26 63 views
1

我知道IE瀏覽器的JavaScript性能比FF和Chrome糟糕,但我的大多數用戶使用IE8。我沒有注意到FF(驚喜)中的性能問題。我正在使用Jquery和Jquery-ui來提供對話功能。JQuery UI對話緩慢加載IE8(第一次加載)

基本上,我有大量的鏈接,我加載到一個對話框使用Ajax。第一次點擊按鈕調出非常快速加載的對話框(〜0.1s)。但是,當我關閉對話框並重新啓動它時,顯示時間會更長。

數據庫和ajax調用不是問題。數據被追加到對話框中,我使用簡單的邏輯來確保函數不被再次調用。隨後試圖打開對話框應該更快。

使用IE8的探查我注意到,有幾萬電話:

"hidden" 
"curCSS" 
"JScript - window script block" 

這些函數調用不來,我第一次打開對話框。我因爲某個原因而處於虧損狀態。

很明顯,在第一次加載對話框時,沒有任何腳本發生在對話框中的單個元素上,但爲什麼在隨後的調用中這會發生變化?

一些代碼:

$(文件)。就緒(函數(){

$("#dialog").dialog({ 
    autoOpen: false, 
    resizable: false, 
    draggable: false, 
    closeText: "", 
    width: "auto", 
    dialogClass: "ddx", 
}); 


$("#button").click(function (e) { 
    e.preventDefault(); 

    //Check if "this" is empty, if not, data is already loaded 
    if ($.trim($("#dialog").html()).length > 0) { 
     $("#dialog").dialog("open"); 
    } 
    else { 

     $.ajax({ 
      url: baseUrl, 
      dataType: "text", 
      success: function (data) { 
       $("#dialog").append(data); 

      } 
     }); 
     $("#dialog").dialog("open"); 
    } 
}); 
}); 

HTML體內:

<div id="dialog" title="Test Dialog" class="ddx"></div>

對話結束了包含幾個層次與數百里的嵌套列表。

回答

0

後續調用可能比第一次調用慢的一個原因是,通過ajax替換HTML比添加新代碼更加昂貴。這是因爲在添加新內容之前,jquery需要刪除和清理舊的DOM元素。

關閉它後,您的第一個窗口可能會隱藏在DOM中,並在下次打開窗口時被替換。

此外,由於cleanData-Method的實現緩慢,jQuery UI對大型Ajax請求有相當的性能影響,特別是在Internet Explorer中。

jQueryUI cleanData performance bug

作爲一個例子:更換2500 DOM-元素與jQuery-UI將花費〜600毫秒在IE8。沒有jQueryUI這會花費200毫秒。

我已經在我自己的代碼中通過替換cleanData-Method來解決此問題,並且它顯着加快了我的應用程序的速度(請參閱jsfiddle/cleanData)。我仍然在尋找一個jQuery-UI補丁,它可以與所有的jQuery版本兼容。

//replace this 
$.cleanData = function(elems) {...}