【问题标题】:Telerik RadAjaxManager loads controls slow the first timeTelerik RadAjaxManager 第一次加载控件很慢
【发布时间】:2011-03-15 14:29:14
【问题描述】:

所以我有一个 RadPanelBar,其中有一个 RadTreeView。在节点单击事件上,我想更新一些控件..现在我只是想更新一个文本框。它工作正常,除了我第一次单击子节点时需要很长时间来更新控件。只是一个简单的文本更改。我在我的函数中设置了一个断点,我注意到触发 OnNodeClick 事件需要很长时间。如果我单击树视图中的父节点,它会在第一次单击时正常加载。另外,在我第一次点击它之后..它加载得很快..如果我刷新页面,再次点击它会很慢..我有什么遗漏..我的 HTML 结构是否不适合这些 AJAX 调用?我觉得这是一个非常简单的例子,应该可以工作..

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<telerik:RadAjaxManagerProxy ID="RadAjaxManagerProxy1" runat="server">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="IncidentReportPanel">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="IRViewPanel" LoadingPanelID="LoadingPanel1" />
            </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManagerProxy>
<telerik:RadAjaxLoadingPanel ID="LoadingPanel1" runat="server" Style="width: 320px;
    padding-top: 125px;" Skin="Vista">
</telerik:RadAjaxLoadingPanel>
<table width="100%">
    <tr style="height: 25px">
        <td>
        </td>
        <td>
        </td>
    </tr>
    <tr style="height: 100%">
        <td style="width: 250px">
            <telerik:RadPanelBar ID="IncidentReportPanel" runat="server" Height="450px" CssClass="IRPanel">
                <Items>
                    <telerik:RadPanelItem runat="server" Text="Incident Reports" ImageUrl="./Images/folder.gif"
                        Value="IncidentReports">
                        <Items>
                            <telerik:RadPanelItem>
                                <ItemTemplate>
                                    <telerik:RadTreeView ID="IncidentReportsTreeView" runat="server" OnNodeExpand="LoadTreeNodes"
                                        OnNodeClick="PopulateIRData">
                                        <Nodes>
                                            <telerik:RadTreeNode Text="Pending" ExpandMode="ServerSideCallBack" ImageUrl="./Images/completed.gif">
                                            </telerik:RadTreeNode>
                                            <telerik:RadTreeNode Text="Completed" ExpandMode="ServerSideCallBack" ImageUrl="./Images/completed.gif">
                                            </telerik:RadTreeNode>
                                        </Nodes>
                                    </telerik:RadTreeView>
                                </ItemTemplate>
                            </telerik:RadPanelItem>
                        </Items>
                    </telerik:RadPanelItem>
                    <telerik:RadPanelItem runat="server" Text="Calendar" ImageUrl="./Images/calendar.gif"
                        Value="Calendar">
                        <Items>
                            <telerik:RadPanelItem>
                                <ItemTemplate>
                                    <telerik:RadCalendar runat="server" ID="IRCalendar" Width="100%" />
                                </ItemTemplate>
                            </telerik:RadPanelItem>
                        </Items>
                    </telerik:RadPanelItem>
                </Items>
            </telerik:RadPanelBar>
        </td>
        <td>
            <asp:Panel ID="IRViewPanel" runat="server">
                <telerik:RadTextBox ID="RadText" runat="server">
                </telerik:RadTextBox>
            </asp:Panel>
        </td>
    </tr>
</table>

        protected void PopulateIRData(object sender, RadTreeNodeEventArgs e)
    {
        RadText.Text = "Hello, World!";
    }

编辑:我根据这篇文章 http://www.telerik.com/help/aspnet-ajax/ajax-client-side-performance.html 更新了我的代码,但问题仍然存在......再次它只发生在第一次......

编辑:澄清一下,通过根据那篇文章进行更新,我的意思是我删除了所有表格和相对宽度,并将它们替换为 css 定位和固定宽度..问题只发生在第一次..而且它只是有时会发生..好几次我以为我解决了这个问题,因为它会开始快速响应..但是在我更改我的 .aspx 并将其改回之后(即使它快速工作时也是完全相同的东西)..我遇到同样的问题。。

编辑:所以,我删除了 AJAX 组件.. 并设置了控件,以便它执行 PostBack.. 仍然需要很长时间才能达到我的断点.. 所以它似乎不是 AJAX 问题......但由于某种原因,我的事件需要很长时间才能触发..

编辑: 因此,我遵循了这篇文章中的建议,并使用 Web 服务进行绑定并处理来自客户端代码的所有内容。一切似乎都很好,直到我决定我想从我的 Web 服务返回节点,这些节点也可以扩展。 . 所以在我的网络服务中,我将我的 RadTreeNodeData 对象的 ExpandMode 设置为 Webservice.. 并且当我展开子节点时它会正确呈现数据.. 但是现在我看到以前的相同问题,其中一些调用需要 20-30 秒..甚至需要 20-30 秒才能达到我的 web 服务中的断点。我应该改用 OnClientNodeExpand 事件吗?我不明白为什么这么慢!!非常感谢任何帮助!

【问题讨论】:

  • 其他时间都快吗?我所说的快是指可以接受的速度。
  • 只有第一次加载时才慢。在所有其他时间,这是一个非常可接受的速度。如果我刷新页面,第一次又慢了..然后其他时间都快。
  • 我真的需要让这个工作..打开我的第一个赏金..希望有一些好的建议! :)

标签: c# asp.net ajax telerik


【解决方案1】:

我建议使用OnClientNodeClicked,然后您可以更新控件客户端。如果您需要来自服务器的更多数据,您可以从客户端代码调用 Web 服务。否则,为了加快速度,我可能必须查看您的整个页面并查看来回发送的请求。也许您有很多正在序列化的视图状态或其他东西。

【讨论】:

  • 我发布的几乎是我所有的代码......我在视图状态中几乎什么都没有......你有什么可以推荐我做的测试来尝试隔离问题吗?
【解决方案2】:

IMO,最快的解决方案是使用 Web 服务进行绑定。标准的 AJAX 功能仍然会通过网络发送 ViewState 和其他不必要的浮点数。你可以在这里找到更多TreeView / Load on Demand Modes。因此,您的树视图将如下所示,您将在其中创建检索节点的 ASMX 或 WCF 服务(在本例中为 Default.asmx 服务上的 LoadNodes 方法)。

<telerik:RadTreeView ID="IncidentReportsTreeView" runat="server" >
    <WebServiceSettings Path="Default.asmx" Method="LoadNodes" />
</telerik>

【讨论】:

  • 我同意这会更快.. 但它仍然不应该需要 10-12 秒才能达到我的断点,对吧?我会考虑网络服务,但我仍然想知道为什么它这么慢......有什么想法吗?
【解决方案3】:

您是否尝试将内容放入 UpdatePanel 以查看 EnablePartialRendering 是否有任何不同?不确定 RadAjaxLoadingPanel 是否有所作为

树中有多少元素?

【讨论】:

  • 我看到树中只有 4 个元素的延迟。我会尝试更新面板的事情,让你知道!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多