Jquery ui JQuery UI对话框在IE8中加载缓慢(第一次快速加载)

Jquery ui JQuery UI对话框在IE8中加载缓慢(第一次快速加载),jquery-ui,internet-explorer,jquery,internet-explorer-8,Jquery Ui,Internet Explorer,Jquery,Internet Explorer 8,我知道与FF和Chrome相比,IE javascript的性能非常糟糕,但我的大多数用户都使用IE8。我没有注意到FF(惊喜)中的性能问题。我使用Jquery和Jquery ui来实现对话框功能 基本上,我使用ajax将大量链接加载到对话框中。第一次单击按钮打开对话框时,它加载得非常快(~0.1s)。但是,当我关闭对话框并再次打开它时,显示它的时间要长得多 数据库和ajax调用不是问题所在。数据被附加到对话框中,我使用简单的逻辑来确保不再调用该函数。随后打开对话框的尝试应该会更快 使用IE8的

我知道与FF和Chrome相比,IE javascript的性能非常糟糕,但我的大多数用户都使用IE8。我没有注意到FF(惊喜)中的性能问题。我使用Jquery和Jquery ui来实现对话框功能

基本上,我使用ajax将大量链接加载到对话框中。第一次单击按钮打开对话框时,它加载得非常快(~0.1s)。但是,当我关闭对话框并再次打开它时,显示它的时间要长得多

数据库和ajax调用不是问题所在。数据被附加到对话框中,我使用简单的逻辑来确保不再调用该函数。随后打开对话框的尝试应该会更快

使用IE8的探查器,我注意到有成千上万的呼叫:

这些函数调用在我第一次打开对话框时不会出现。我不知为什么

很明显,在第一次加载对话框时,对话框中的各个元素上没有任何脚本发生,但是为什么在后续调用中会发生这种变化呢

一些代码:

$(文档).ready(函数(){

正文中的html:


该对话框最终包含多个级别的嵌套列表,其中包含数百个li。

后续调用可能比第一次调用慢的一个原因是,通过ajax替换HTML比添加新代码更昂贵。这是因为jquery需要在添加新内容之前删除和清理旧的DOM元素

关闭第一个窗口后,它可能会隐藏在DOM中,并在下次打开窗口时被替换

此外,jqueryui对大型Ajax请求有很大的性能影响,特别是在internetexplorer中,因为cleanData方法的实现速度较慢

例如:在IE8中,用jQueryUI替换2500个DOM元素将花费约600毫秒。如果没有jQueryUI,这将花费约200毫秒

我在自己的代码中通过替换cleanData方法解决了这一问题,它显著加快了我的应用程序的速度(请参阅)。我仍在寻找一个jQuery UI补丁,它将适用于所有jQuery版本

//replace this
$.cleanData = function( elems ) {...}
$("#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");
    }
}); 
}); 
//replace this
$.cleanData = function( elems ) {...}