减少具有大表的ASP.NET WebForms页面的加载时间

时间:2011-06-17 17:21:49

标签: asp.net html performance webforms

我有一个WebForms页面,左侧是树视图,右侧是网格。当用户单击树视图节点时,将使用SqlDataSource填充相应的网格,然后显示。整个事情都在一个UpdatePanel中。

这是我的设置:

<asp:GridView runat="server" ID='LocationsRowGrid' AutoGenerateColumns="false" DataSourceID="SqlDataSource_LocationRow">
    <Columns>
        <asp:TemplateField HeaderText="Location">
                <ItemTemplate>
                    <asp:DropDownList runat="server" ID="NAME_LCTN" OnDataBound="dropdown_DataBound"
                        DataTextField="NAME_TO_LCTN" DataValueField="NAME_TO_LCTN" DataSourceID="SqlDataSource_LocationNames">
                    </asp:DropDownList>
                </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Move Time (HR)">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="STD_MOVE_TME_AMNT" Text='<%# Bind("STD_MOVE_TME_AMNT") %>'></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="LAST_UPDATED_BY" HeaderText="Updated By" Visible="true" />
        <asp:BoundField DataField="LAST_REV_DT" HeaderText="Revision Date" Visible="true" />
    </Columns>        
</asp:GridView>

还有其他(较大的)网格,但这基本上就是模板。最大的网格有大约12列,其中大约6个是带有文本框的模板字段,其中一个是带有下拉列表的模板字段。下拉列表被数据绑定到另一个表,该表有大约150个元素。网格本身有大约100个条目。

这很慢。似乎问题可能与HTML的呈现有关 - 服务器没有花太多时间来响应,但浏览器(Chrome和IE)几乎都在尝试渲染结果。我的第一个(显而易见的)猜测是渲染100个html选项,每个选项都包含&gt; 100个元素,将会变慢 - 特别是在像ASP.NET这样的表格标签中一次完成时。

这似乎是对缓慢原因的合理猜测吗?

对于这个项目,我(目前)不允许使用jQuery(或者可能是任何其他javascript库)并且必须证明我使用的任何和所有javascript。基本上,其他开发人员不希望需要任何真正的javascript理解,以便在我完成它时能够维护这个应用程序。

鉴于这些限制,我可以做些什么来减少返回HTML的大小和/或浏览器中的渲染时间?提前谢谢。

2 个答案:

答案 0 :(得分:0)

有几个想法:

  1. '关闭'渲染以查看服务器端查询中有多少响应时间。您可以通过注释掉DataSoource = statements来执行此操作。
  2. 浏览器倾向于等到整个表格完成之后才渲染任何表格。您可能会尝试不同的布局,以便不是所有内容都在一个表中。也许是一个转发器,每个项目都是一个独立的桌子?然后每个都可以在标记出现时进行渲染。
  3. 您可以开始使用jQuery和AJAX来更好地浏览您的内容。而不是100行,也许10行,页面1,2,3 ......链接?

答案 1 :(得分:0)

我的想法是减少初始页面上的绑定数据量并建立分页。除非这是“报告”,否则用户不需要一次看到每一行。

另一种可能性是您将页面设置为也使用viewstate作为网格。如果是这样,您将在绑定中消耗时间以在呈现之前创建视图状态(至少在默认情况下)。

除此之外,我同意@ n8wrl你需要通过隔离它是否真的是渲染问题进行故障排除。我可能会通过跟踪而不是关闭它来做到这一点,但你必须确保问题是渲染。另一个控件,如转发器,可能会起作用,但我只是将其视为CSS的一个好处,它减少了标记数据的数量以产生输出。

压缩IIS中的响应流也可以加快速度。渲染时间仍然相同,但您将消除将HTML发送到浏览器的时间,这至少是您问题的一部分。