ASP.NET網站的效能最佳化【四】

來源:互聯網
上載者:User
21. 只在必要時儲存伺服器控制項檢視狀態
  自動檢視狀態管理是伺服器控制項的功能,該功能使伺服器控制項可以在往返過程上重新填充它們的屬性值(您不需要編寫任何代碼)。但是,因為伺服器控制項的檢視狀態在隱藏的表單欄位中往返於伺服器,所以該功能確實會對效能產生影響。您應該知道在哪些情況下檢視狀態會有所協助,在哪些情況下它影響頁的效能。例如,如果您將伺服器控制項綁定到每個往返過程上的資料,則將用從資料繫結操作獲得的新值替換儲存的檢視狀態。在這種情況下,禁用檢視狀態可以節省處理時間。
  預設情況下,為所有伺服器控制項啟用檢視狀態。若要禁用檢視狀態,請將控制項的EnableViewState 屬性設定為 false,如下面的 DataGrid 伺服器控制項樣本所示。
以下是引用片段:

  您還可以使用 @ Page 指令禁用整個頁的檢視狀態。當您不從頁回傳到伺服器時,這將十分有用:
以下是引用片段:

  注意 @ Control 指令中也支援 EnableViewState 屬性,該指令允許您控制是否為使用者控制項啟用檢視狀態。
  若要分析頁上伺服器控制項使用的檢視狀態的數量,請(通過將 trace="true" 屬性包括在 @ Page 指令中)啟用該頁的跟蹤並查看 Control Hierarchy 表的 Viewstate 列。有關跟蹤和如何啟用它的資訊,請參見 ASP.NET 跟蹤。
22. 避免到伺服器的不必要的往返過程
  雖然您很可能希望盡量多地使用 Web Form頁架構的那些節省時間和代碼的功能,但在某些情況下卻不宜使用 ASP.NET 伺服器控制項和回傳事件處理。
  通常,只有在檢索或儲存資料時,您才需要啟動到伺服器的往返過程。多數資料操作可在這些往返過程間的用戶端上進行。例如,從 HTML 表單驗證使用者輸入經常可在資料提交到伺服器之前在用戶端進行。通常,如果不需要將資訊傳遞到伺服器以將其儲存在資料庫中,那麼您不應該編寫導致往返過程的代碼。
  如果您開發自訂伺服器控制項,請考慮讓它們為支援 ECMAScript 的瀏覽器呈現用戶端代碼。通過以這種方式使用伺服器控制項,您可以顯著地減少資訊被不必要的發送到 Web 服務器的次數。
  使用 Page.IsPostBack 避免對往返過程執行不必要的處理
  如果您編寫處理伺服器控制項回傳處理的代碼,有時可能需要在首次請求頁時執行其他代碼,而不是當使用者發送包含在該頁中的 HTML 表單時執行的代碼。根據該頁是否是響應伺服器控制項事件產生的,使用 Page.IsPostBack 屬性有條件地執行代碼。例如,下面的代碼示範如何建立資料庫連接和命令,該命令在首次請求該頁時將資料繫結到 DataGrid 伺服器控制項。
以下是引用片段:
  void Page_Load(Object sender, EventArgs e)
  {
  // Set up a connection and command here.
  if (!Page.IsPostBack)
  {
  String query = "select * from Authors where FirstName like '%JUSTIN%'";
  myCommand.Fill(ds, "Authors");
  myDataGrid.DataBind();
  }
  }
  由於每次請求時都執行 Page_Load 事件,上述代碼檢查 IsPostBack 屬性是否設定為 false。如果是,則執行代碼。如果該屬性設定為 true,則不執行代碼。
  注意 如果不運行這種檢查,回傳頁的行為將不更改。Page_Load 事件的代碼在執行伺服器控制項事件之前執行,但只有伺服器控制項事件的結果才可能在輸出頁上呈現。如果不運行該檢查,仍將為 Page_Load 事件和該頁上的任何伺服器控制項事件執行處理。
23. 當不使用工作階段狀態時禁用它
  並不是所有的應用程式或頁都需要針對於具體使用者的工作階段狀態,您應該對任何不需要工作階段狀態的應用程式或頁禁用工作階段狀態。
  若要禁用頁的工作階段狀態,請將 @ Page 指令中的 EnableSessionState 屬性設定為 false。例如:
以下是引用片段:

  注意 如果頁需要訪問會話變數,但不打算建立或修改它們,則將 @ Page 指令中的 EnableSessionState 屬性設定為 ReadOnly。
  還可以禁用 XML Web services 方法的工作階段狀態。有關更多資訊,請參見使用 ASP.NET 和 XML Web services 用戶端建立的 XML Web services。
  若要禁用應用程式的工作階段狀態,請在應用程式 Web.config 檔案的 sessionstate 配置節中將 mode 屬性設定為 off。例如:
以下是引用片段:

24. 仔細選擇工作階段狀態提供者
  ASP.NET 為儲存應用程式的會話資料提供了三種不同的方法:進程內工作階段狀態、作為 Windows 服務的進程外工作階段狀態和 SQL Server 資料庫中的進程外工作階段狀態。每種方法都有自己的優點,但進程內工作階段狀態是迄今為止速度最快的解決方案。如果只在工作階段狀態中儲存少量易失資料,則建議您使用進程內提供者。進程外解決方案主要用於跨多個處理器或多個電腦縮放應用程式,或者用於伺服器或進程重新啟動時不能遺失資料的情況。有關更多資訊,請參見 ASP.NET 狀態管理。
25. 不使用不必要的Server Control
  ASP.net中,大量的伺服器端控制項方便了程式開發,但也可能帶來效能的損失,因為使用者每操作一次伺服器端控制項,就產生一次與伺服器端的往返過程。因此,非必要,應當少使用Server Control。
26. ASP.NET應用程式效能測試
  在對ASP.NET應用程式進行效能測試之前,應確保應用程式沒有錯誤,而且功能正確。具體的效能測試可以採用以下工具進行:
  Web Application Strees Tool (WAS)是Microsoft發布的一個免費測試載入器,可以從http://webtool.rte.microsoft.com/上下載。它可以類比成百上千個使用者同時對web應用程式進行訪問請求,在伺服器上形成流量負載,從而達到測試的目的,可以產生平均TTFB、平均TTLB等效能匯總報告。
  Application Center Test (ACT) 是一個測試載入器,附帶於Visual Studio.NET的企業版中,是Microsoft正式支援的web應用程式測試載入器。它能夠直觀地組建圖表結果,功能比WAS多,但不具備多個客戶機同時測試的能力。
  伺服器作業系統"管理工具"中的"效能"計數器,可以對伺服器進行監測以瞭解應用程式效能。【完】

  對於網站開發人員來說,在編寫ASP.NET應用程式時注意效能問題,養成良好的習慣,提高應用程式效能,至少可以延遲必需的硬體升級,降低網站的成本。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.