有的時候我們的Web 應用程式在本機測試的時候,速度很快,可放在區域網路上測試的時候,卻會發現存在效能問題;甚至有時在區域網路速度正常的應用,在廣域網路上還會發現問題。這些問題一般都是應用上的疏忽或錯誤,並不涉及系統架構,透過真實環境的調試和測試都能找到問題所在並解決。
今天我們要說的是透過改善架構來從根本上提高ASP.Net 應用程式的效能。
我們先來對ASP.Net 的幾個簡單的應用來做測試。
測試環境:AthlonXP 3200+,DDR400 512M,WindowsXP SP2,本機的SQL Server 2000,中文Northwind 資料庫(從Access匯入)的產品表,約70筆記錄。
測試序號 | 程式類型 | 測試方法 | 測試結果 (每秒請求數) | SQLServer 佔用資源 | ASP.Net 所佔用資源 |
1 | Web | 服務以產品表填入DataSet,並傳回記錄數 | 250次 | 100% | - |
2 | Web服務 | 以產品表填入DataSet,並傳回DataSet | 138次 | 54% | 46% |
3 | Web應用程式 | 以產品表填入DataSet,並綁定DataGrid | 70次 | 28% | 72% |
在第一個測試裡,Web 服務只是從資料庫讀取記錄填入DataSet,並傳回記錄數(注意不是回傳記錄),所佔用的系統資源很少,假設系統資源完全被SQLServer 佔用,並且對結論不會有負面影響。
在第二個測試中,Web 服務將DataSet 傳回,每秒請求數就降低了幾乎一半, 這一半的系統資源,被ASP.Net 用於將DataSet 序列化。
在第三個測試中,Web 應用程式將DataSet 綁定到DataGrid,並傳回頁面,每秒請求數幾乎降低了四分之三,這些系統資源被ASP.Net 用於將DataSet 綁定到DataGrid,並將頁面序列化。
從上述測試中我們可以看到,DataGrid 的綁定和序列化會佔用大量的系統資源,如果要提高系統效能,需要透過改善架構來實現。
一、將對資料庫的操作,從頁面中分離出來,放到獨立的持久層。
這樣在客戶端透過DOM 或XSLT 將資料展現為表格,來取代伺服器端DataGrid 的綁定工作,大大減輕了伺服器的壓力。且客戶端透過AJAX 從持久層取得數據,會提高使用者的使用體驗。
二、將頁面從資料中徹底獨立出來,以便利用快取。
有的應用了AJAX 的頁面還是會讀取初始數據,這樣的話頁面就不能快取。這些頁面一般比較複雜,會比一般頁面佔有更多的資源,如果能夠利用緩存,將進一步提升系統的效能。
透過以上兩點,ASP.Net 的效能,幾乎能夠提高一倍。
您可以自己作一下測試,或造訪我們的範例www.BizStruct.cn 。