我有一个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的大小和/或浏览器中的渲染时间?提前谢谢。
答案 0 :(得分:0)
有几个想法:
答案 1 :(得分:0)
我的想法是减少初始页面上的绑定数据量并建立分页。除非这是“报告”,否则用户不需要一次看到每一行。
另一种可能性是您将页面设置为也使用viewstate作为网格。如果是这样,您将在绑定中消耗时间以在呈现之前创建视图状态(至少在默认情况下)。
除此之外,我同意@ n8wrl你需要通过隔离它是否真的是渲染问题进行故障排除。我可能会通过跟踪而不是关闭它来做到这一点,但你必须确保问题是渲染。另一个控件,如转发器,可能会起作用,但我只是将其视为CSS的一个好处,它减少了标记数据的数量以产生输出。
压缩IIS中的响应流也可以加快速度。渲染时间仍然相同,但您将消除将HTML发送到浏览器的时间,这至少是您问题的一部分。