2012-10-26 61 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) {...}