Find()的Javascript代码优化

Find()的Javascript代码优化,javascript,c#,jquery,Javascript,C#,Jquery,我有一个c#代码,它在SQL中运行查询并返回大约2000行。然后创建一个Treeview控件并将其添加到my主页面。这几乎是立即完成的,这很好 var orgId = $('select[name="ctl00$PageContent$FunctionsDropDownList"] option:selected').val(); if (!orgId) { return false; } //calls serversid

我有一个c#代码,它在SQL中运行查询并返回大约2000行。然后创建一个Treeview控件并将其添加到my主页面。这几乎是立即完成的,这很好

var orgId = $('select[name="ctl00$PageContent$FunctionsDropDownList"] option:selected').val();
        if (!orgId) {
            return false;
        }
        //calls serverside get data
        //This line happens quickly
        $('#ctl00_PageContent_HiddenRulesDialogTriggerButton').click();

        //This part takes about 10-15 minutes to finally get to the true
        var i = setInterval(function () {
            if ($('#ctl00_PageContent_treeview').find('table').length > 0)
            {
                clearInterval(i);
                StartDialog();
                return false;
            }
        });
因此,点击
clearInterval(i)
大约需要10-15分钟。当它这样做时,
i=978
。不知道为什么要花这么长时间。可能是
find()
非常慢。有人推荐替代方案吗

编辑

尝试使用
.one()
域节点插入
事件,将事件委托给
文档

功能启动对话框(el){
控制台日志(el)
}
$(文件)
.1(“域节点插入”
,“#ctl00_页面内容_树视图表”
,功能(e){
StartDialog(本)
});
$(“#ctl00_PageContent_treeview”)。附加(“”

问题可能在于调用setInterval时没有第二个参数(时间间隔)

让我们看看您的代码似乎在做什么

  • 查询后端,提取构建树视图所需的数据。这件事做得很快
  • 异步构建树
  • 在构建树的过程中,使用find()不断检查它是否准备就绪
  • 有几个问题

  • 与非DOM数据操作相比,所有DOM查询都相当慢。是的,find()不是最快的函数,因为它从指定的父对象开始搜索整个DOM,并返回找到的对象
  • 如果像这样仅使用一个参数运行setInterval:
  • 代码:

    …我想它每毫秒执行一次。我已经用以下代码对此进行了测试:

    var k = 1;
    var i = setInterval(function () {
        if (k < 100)
        {
            k += 1;
        } else {
            clearInterval(i);
            window.alert('Finished!');
        }
    //No second argument
    });
    

    回调是更好的做法,但提供时间间隔可能也会起作用。

    轮询不是正确的方法。大概当您调用服务器获取数据时,您使用的是
    $.ajax()
    。数据到达时将调用您的回调。这个回调可能已经在您的代码中,并且正在用于填充Treeview控件。您只需在填充TreeView后添加其他代码即可显示对话框。如何创建TreeView?当“treeview创建操作”完成时,你不能将这个“StartDialog”附加为回调吗?我没有编写Javascript代码,但我一直在尝试修复它。树视图是在代码隐藏中创建的。然后StartDialog()创建弹出窗口并添加treeview html。但是StartDialog()不是问题所在。在find()中出现了瓶颈,我甚至在5000毫秒的时间内尝试了它,但总的问题是IE。我运行了那段代码,时间间隔设置为5000,而且花了很长时间。当我在Firefox中运行它时,大约需要2-3秒来显示。
    var k = 1;
    var i = setInterval(function () {
        if (k < 100)
        {
            k += 1;
        } else {
            clearInterval(i);
            window.alert('Finished!');
        }
    //No second argument
    });
    
    var i = setInterval(function () {
        if ($('#ctl00_PageContent_treeview').find('table').length > 0)
        {
            clearInterval(i);
            StartDialog();
            return false;
        }
    //Once per second
    },1000);