65.9K
CodeProject 正在变化。 阅读更多。
Home

开发者指南

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.83/5 (4投票s)

2012年10月17日

CPOL

6分钟阅读

viewsIcon

10218

开发人员在编写代码或设计不同层时需要注意的事项:表示层:选择您的UI元素

开发者在编写代码或设计不同层时需要注意的事项

表示层

  1. 仔细选择您的 UI 元素
  2. 优化 Viewstate
  3. 状态管理应有效且优化良好
  4. 良好缓存管理
  5. 减少与服务器的往返次数
  6. 有效利用客户端脚本
  7. 考虑异步调用
  8. 考虑部分/AJAX 调用来更新页面的一部分
  9. 对于大型记录集,请考虑分页,如果可能,提供服务器端分页

仔细选择 UI 元素

控件的选择是 ASP.NET 网页性能的重要组成部分。如您所知,页面生命周期服务器控件生命周期,它必须在执行一些事件后加载,这将花费一些额外的时间来处理和渲染控件。所以请明智地选择您的控件。

首先,我们应该讨论数据控件,它们是任何 Web 应用程序中最常用的控件,用于显示数据集或记录。

ASP.NET 中主要有四种数据控件,它们是

  • DataList
  • GridView
  • ListView 和
  • Repeater

拥有这些控件来以自己的方式展示数据记录。每个控件都有其自身的优点和缺点,具体取决于功能。当我们考虑性能时,这些控件的顺序将是 RepeaterListViewDataListGridView

Repeater: 

Repeater 控件派生自 Control 类。Repeater 仅重复模板中给出的数据。重复的数据通常是 HTML 代码与数据源中的记录混合而成。Repeater 的输出不是预定义的。因此,Repeater 需要最多的工作来定义模板。作为回报,它为我们提供了最大的灵活性来构建布局和优化表示。

对于相同的模板和相同的数据集,Repeater 通常比 DataListGridView 控件工作得更快。这主要是因为 DataReader 类,它用于只读访问。DataReaderGridView 常用的 DataSetDataTable 类更快。

GridViewDataList 控件相比,Repeater 的功能有限。默认情况下,Repeater 适合显示数据。如果您需要编辑数据,它不是最佳选择。此外,默认情况下它不提供记录的分页和排序。

ListView

ListView 控件是 ASP.NET 3.5 中引入的最新数据表示控件。之前的控件(RepeaterDataListGridView)在逻辑上是相互关联的。
例如,Repeater 最简单但最快,然后 DataList 功能更多但开销也更大,最后 GridView 最复杂,功能最多,但最重,因此在页面上最慢。

现在,有了新的 ListView 控件,它试图在两个方面提供最佳:速度和设计灵活性,以及许多功能,如分页、记录更新或删除等。因此,ListView 控件通常比 RepeaterDataList 更好的选择。

设计的灵活性是有代价的。要使用 ListView,您可能需要编写大量的标记代码。对于简单的表布局,GridView 需要的工作量要少得多。

ListView 有新的 LayoutTemplate。与 Header 和 Footer 模板不同,ListView 只有一个 LayoutTemplate。与 Header 和 Footer 模板相比,LayoutTemplate 的主要优势是它使标记代码看起来更面向对象。所以,这两种模型之间没有太大区别。使用 ListView 上的 LayoutTemplate 可以实现与 RepeaterDataListGridView 上的 HeaderTemplateFooterTemplate 相同的结果。

DataList

Repeater 不同,DataList 控件派生自 WebControl 类。这赋予了它许多样式属性,如 BorderStyleBackColorForeColor 等。

DataList 介于 RepeaterGridView 之间,在许多方面看起来是这两者的折衷。与 Repeater 相比,DataList 功能更多但在设计上更受限制。另一方面,与 GridView 相比,它具有更多的灵活性和更少的功能。

此外,DataList 具有 RepeatDirectionRepeatColumnsRepeatLayout 属性,这些属性是 DataList 控件独有的。当您需要创建每行多条记录的显示时,例如图片库、产品目录等,这些属性非常有用。
例如,假设您正在创建一个图片库,并希望每行显示 5 张图片。Repeater 需要检查记录位置并操作 HTML。使用 DataList,只需使用 RepeatDirection="Horizontal"RepeatColumns="5"RepeatLayout 可以是 Table 或 Flow,具体取决于您是否需要在布局中使用 HTML 表结构。

GridView

DataList 控件一样,GridView 派生自 WebControl 类,并包含许多样式属性。除此之外,GridView 是最复杂的控件,拥有最多的属性。众多功能包括数据分页、排序、记录更新和删除。ASP.NET 的早期版本有 DataGrid 控件。GridView 在 ASP.NET 2.0 中取代了 DataGrid,成为旧 DataGrid 控件的改进版本。

GridView 以表格形式显示数据。行和列表示为 HTML 表。如果您需要类似网格的显示,这非常有用。如果您需要以表格布局呈现数据,那么 GridView 需要最少的努力。同时,如果您想要更可定制的流式布局,GridView 不是最佳选择。

使用 GridView 控件时的一个常见问题可能是大型 ViewState,这会导致页面加载变慢并需要更多带宽。这对于流量不大的网站来说可能微不足道,但请记住,页面加载的每一秒,都会有一定比例的访问者不耐烦并离开网站。此外,大量的 view state 对 SEO(搜索引擎优化)不利。

另一个问题是在大型表或高流量网站上使用默认分页器。如果使用默认分页,GridView 将在内存中加载完整的数据集,这会降低网站的性能。

HTML 元素 VS ASP.NET 服务器控件

当比较这两种控件时,HTML 控件的速度非常快。另一方面,服务器控件由于其渲染过程而速度较慢。所有服务器控件在实际页面加载时,都会渲染成普通的 HTML 元素。ASP.NET 渲染引擎必须根据内容应渲染的浏览器渲染服务器控件对应的 HTML 文本。与普通 HTML 元素相比,这是一个额外的过程。

与普通 HTML 元素相比,服务器控件的优势非常高

  1. 它们具有状态,因此在每次页面回发时,我们可以保留控件的值,并在回发后进行绑定。
  2. 它们是面向对象的,因此我们可以从代码隐藏处理控件的公共属性。
  3. 它们提供缓存功能,以便我们可以在页面导航中保留值
  4. 我们可以将服务器事件附加到服务器控件,而不能直接将它们附加到 HTML 控件。

ViewState 优化

ViewState 是一个隐藏字段,它以 BASE64 格式存储所有其他控件的值,并驻留在同一页面上。ViewState 的范围仅限于页面。ASP.NET 页面中的所有服务器控件都通过 ViewState 维护其状态。

ViewState 的过程非常简单。每当发生页面回发时,所有服务器控件的值及其状态都将保存在 ViewState 中。回发完成后,相应的值将绑定到控件。要理解这个周期,请参阅页面生命周期

下图说明了相对于每个服务器控件,ViewState 中保存了哪些值

 

有关 ViewState 优化的更多信息,请单击此处

© . All rights reserved.