摘要:隨著互聯網的發展,新技術層出不窮,基于ASP.NET平臺的網站和應用越來越廣泛,用戶對網站的訪問速度的要求也越來越高。網站的訪問速度取決于很多因素,該文主要從網站的系統架構和性能優化兩方面入手,結合實際經驗,提出一些最佳技術實踐和解決方案,供大家參考。
關鍵詞:ASP.NET;網站架構;性能優化
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)24-1166-02
ASP.NET Website Architecture and Performance Optimization
XIE Yun-jia
(School of Educational Technology and Communication,GuangDong Polytechnic Normal University,Guangzhou 510665,China)
Abstract: With the development of the Internet and new technology, Website based on ASP.NET is becoming more and more widely used. Meanwhile, the users have a growing demand of the speed of visiting the web pages, which is decided by many factors. This paper combined with own practical experiences, gives some best practices and technology solutions on how to build an ASP.NET-Based website of multi-layer architecture with best performance.
Key words: ASP.NET;website architecture;performance optimization
隨著互聯網的發展,新技術層出不窮,基于ASP.NET的網站和應用越來越廣泛,用戶對網站的訪問速度的要求也越來越高。網站的訪問速度取決于很多因素,例如網絡的速度、服務器的性能、網站的系統架構、數據庫的應用策略,以及Web頁面本身的設計等等。本文主要從網站的系統架構和網站性能優化兩方面入手,結合自己的一些實際經驗,并以廣州市天河區教育局門戶網站為例子,提出一些最佳技術實踐和解決方案。
1 ASP.NET網站的系統架構
系統架構是指將應用系統的每個功能部分垂直地分解到各個獨立的邏輯層中,每個邏輯層只與相鄰的邏輯層通過接口通訊。ASP.NET網站通常采用三層的系統架構,如圖1所示:

圖1 網站三層系統架構
1) 表示層:網站與用戶交互的界面,由動態Web頁面組成。
2) 業務層:獲得表示層用戶的輸入,執行業務處理,調用數據層,并把結果返回給表示層呈現給用戶。
3) 數據層:負責保存和維護系統數據。
這種分層的系統架構帶來的好處是高性能、靈活性、可維護性和可擴展性。
廣州市天河區教育局門戶網站就采用這種典型的3層架構,獲得較好的性能,并為以后的系統維護和功能擴展留有空間,網站采用IIS6.0 作為Web服務器,SQL Server 2005 作為數據庫服務器,以Visual Studio 2005 作為開發工具,采用C#語言,基于ASP.NET 2.0平臺開發完成。
2 ASP.NET網站的性能優化
良好的網站系統架構只是獲得優異的網站性能的第一步,針對不同的需求還需要采取更多的優化措施,來獲得更好的性能,讓用戶等待的時間更短,為用戶提供更好的使用體驗和更便捷的服務。
2.1 數據層的性能優化
大規模、多用戶、高流量的網站,最大的性能瓶頸就是數據層,例如:數據庫連接打開和關閉,數據表的連接,數據的檢索和排序等。所以數據層是首先需要優化的地方。
1)開啟并設置數據庫連接池。可以通過數據庫連接字符串中的Max Pool Size 和Mini Pool Size來設置最大連接數和最小連接數,來獲得較好的性能。例如:\"Server=(local); Integrated Security = SSPI; Database=MyDatabase; Max Pool Size=100; Min Pool Size=5\"。
2) 采用存儲過程。存儲過程是數據庫內置的用來訪問和維護數據的內部程序,具有預編譯、速度快、效率高、靈活安全等特點。使用存儲過程會犧牲一定的可移植性,但帶來的卻是性能幾倍的提升。
3) 其他的方法,例如:為數據表添加索引,可以提高查詢速度;謹慎使用多表連接和嵌套的查詢,用內連接或者左連接代替;數據表龐大時,分割數據表等等。
2.2 業務層的優化
業務層是集中完成業務邏輯的地方,同時向上連接表示層,向下連接數據層,也是性能優化一個關鍵的地方。可以采取的措施包括“數據緩存和SQL緩存依賴”、“用戶自定義控件”和“處理回傳事件”。
1) 數據緩存和SQL緩存依賴。緩存可以極大地提高網站性能,是系統性能優化一個需要重點考慮的方面。借助ASP.NET 2.0配合SQL Server 2005,可以采用“數據緩存加SQL緩存依賴”的技術方案。數據緩存應用了Cache機制,任何添加到緩存中的項目都能被任何其他頁面、控件或者組件訪問。把經常需要的數據放入數據緩存項中,即可以在多個頁面和組件中共享信息,又可以減少數據庫的連接次數,這可以明顯縮短系統相應時間和提高系統性能。如果緩存項中的數據依賴數據庫中的數據,則可以通過SQL緩存依賴,在指定的數據庫中的數據發生修改時,自動地重新載入緩存數據。
2) 用戶自定義控件。用戶自定義控件一方面可以提高軟件組件的復用程度,提高軟件開發和生產效率,另一方面還可以提高系統性能,特別是在一個大的頁面上存在一個或者多個局部的刷新或者更新。把大頁面上每個單獨刷新或者更新的部分,定義成用戶自定義控件,當更新時,服務器只需要處理和傳輸這個控件的數據,減輕服務器的負擔,降低網絡帶寬的壓力。
3) 處理回傳事件。通過Page類的IsPostBack屬性來判斷是新的請求還是回傳事件,如果是回傳事件,則無需重新載入頁面控件和數據,可以節省時間和帶寬。
2.3 表示層的優化
表示層是負責顯示和與用戶交互的動態Web頁面,表示層的優化可以從以下幾個方面入手。
1) 頁面輸出緩存。頁面輸出緩存不同于數據緩存:數據緩存是緩存數據庫中讀取的數據或者應用程序計算出來的數據,頁面輸出緩存則是緩存整個Web頁面所呈現的內容,當下一次用戶請求的時候,就直接從緩存中取出這個頁面。更深入一點的優化手段還可以使用帶參數的頁面輸出緩存和部分頁面緩存。
2) 生成靜態頁面。頁面輸出緩存的一個替代方案就是讓動態的Web頁面生成靜態的HTML頁面,這也是一個可以顯著提高頁面打開速度的方法,特別是網站首頁,訪問的人數多,又包含很多部分都是需要從數據庫中讀取數據然后進行邏輯處理的,如果是生成靜態的HTML頁面,不需要訪問數據庫也沒有邏輯處理,頁面生成和顯示的速度提高不少。
3) 管理ViewState。ViewState用于維護客戶端在回傳過程中的頁面狀態,隨著頁面上控件數目的增多,ViewState信息將明顯增大,導致大量的網絡傳輸和服務器壓力。通過有選擇性的禁用控件的ViewState,可以顯著改善網絡流量和網站性能。
4) 單獨的CSS和JavaScript腳本文件。把CSS和JavaScript腳本文件單獨放入一個文件中,可以減小頁面文件的體積,還可以在整個網站中共享腳本,減少重復下載。
2.4 服務器的分工
除了系統架構和程序設計之外,另外一個對網站性能有重要影響是服務器的分工。一個好的建議是采用3個獨立的服務器:Web服務器、數據庫服務器、文件下載和圖片服務器,各司其職,即安全,又可以避免因為文件和圖片下載占用了大量的CPU時間和網絡帶寬。
3 結束語
網站的系統架構和性能優化是一個沒有盡頭的研究之路,系統架構師和程序員總在追求極致性能的解決方案。本文分析了ASP.NET網站的典型的三層系統架構,并從數據層,業務層,表示層和服務器的分工四個方面,提出一些性能優化的方案,供大家參考。
參考文獻:
[1] Stephen Walther.ASP.NET揭秘(卷2)[M].譚振林,譯.北京:人民郵電出版社,2007:135-190.
[2] 張英剛.NET平臺網站架構調優實踐點滴[J].程序員,2008(1):83-84.
[3] Cristian Darie,Karli Watson.ASP.NET2.0電子商務開發實戰[M].施游,譯.北京:人民郵電出版社,2007:147-153.
[4] 張南平,陳小倩.ASP.NET性能優化[J].微機發展,2005(8):88-91.
[5] 曾誠.高性能ASP.NET應用程序的探討與研究[J].湖北大學學報:自然科學版,2004(1):19-22.
[6] 沈軍.基于ASP.NET2.0技術的Web數據庫多層架構設計與實現[J].電子測量技術,2008(2):76-79.
[7] 張松,李曦.分布式多層架構中中間層的優化設計[J].計算機應用,2005(5):1058-1060.