摘 要:縮短Web訪問中的用戶感知時間,提高網站性能是Web應用程序開發(fā)中一個極為重要的問題。從軟件處理數據的角度出發(fā),針對Web應用程序的特點,從優(yōu)化數據訪問以及Web數據顯示2個方面分別討論如何縮短Web數據響應時間,以達到縮短用戶感知時間的方法。并利用ACT測試工具對進行測試,并給出了這些方法的實際應用測試數據。驗證本文所提出的方法能極大地優(yōu)化Web應用程序的應用,有效地縮短用戶的感知時間。
關鍵詞:Web應用;Web響應時間;XML;緩存
Research on Reducing Web Response Time in the Application of Web
HANG Xiaoli1,YU Haiyan2
(1.Xi′an Areotechnical College,Xi′an,710077,China;2.Xi′an Institute of Post and Telecommunications,Xi′an,710061,China[J]
Abstract:Reducing User Perceived Latency (UPL during Web accessing and promoting efficiency in Web application is a key issue.This paper proposes a method to reduce Web response time in order to reduce UPL,which is based on data processing in two aspects,including optimization of data access and web data display.This method has been tested by ACT tools and shows the applied effect of these methodswith testing data.The results have proved that this method can effectively reduce UPL and improve the overall performance of a Web application.
eywords:Web application;Web response time;XML;cache
1 引 言
性能是Web應用程序成功與否的關鍵因素,響應時間則是性能的一個重要指標,尤其是從用戶的角度來看,隨著同時訪問的用戶數的增加,Web應用程序的響應時間也會相應增加,當其增加到用戶無法接受的程度時,用戶便會失去耐心而離開該網站。根據ona Research[1]的研究指出,如果使用者等待下載網頁的時間超過8 s,將有30%的用戶選擇停止瀏覽網頁,同樣的研究表明,如果下載網頁的時間縮短1 s,則這個數字將從30%降低到8%。由此可見終端用戶所感到的時間延遲[2](user-perceived latency)已經成為今天Internet的主要性能問題。
在網絡帶寬并沒有得到相對擴充、網絡流量絕對增加的情況下,是否能找到一些有效的辦法,縮短整個網絡對用戶click的響應時間。本文針對這一問題,從Web應用程序開發(fā)的角度出發(fā),通過提高Web應用程序的性能,從而加速網絡對用戶的反應速度,縮短用戶感知的時間延遲。
2 Web數據響應時間
從終端用戶的觀點看,從瀏覽器對網站發(fā)出一個HTTP GET的請求,一直到網站服務器完整地傳回網頁內容至瀏覽器的這段過程可以描述為圖1所示的時序圖。
客戶端和Web服務器之間HTTP信息的傳送是通過TCP連接實現(xiàn)的。圖1描述Web請求中的所有時間延遲??蛻舳讼蚍掌靼l(fā)送文件請求,首先建立TCP連接(1~3),連接建立后,Web服務器響應且發(fā)送文件至客戶端,客戶端接受文件且在屏幕上顯示出來(4~5)。如果文件中包含圖片或者需要在屏幕上顯示的處理數據,客戶端瀏覽器就需要發(fā)送請求去檢索獲取這些數據(6~n)。整個Web頁面在屏幕上顯示,其中可能含有連接,如果用戶點擊連接,瀏覽器就需要使用同樣的過程檢索新的頁面。
根據圖1和以上分析,定義如下的概念:
3 減少數據顯示的響應時間
目前的Web應用開發(fā)大多采用基于B/S模式的3層架構,如圖2所示。
分層分離了邏輯,使得系統(tǒng)結構層次明晰,系統(tǒng)變得靈活和易于維護。圖2很好地說明了Web中的分層架構,同時也描述Web頁面提取數據顯示的過程,以下從軟件處理數據的角度分別討論如何縮短數據訪問及Web數據顯示延遲,從而縮短Web數據的響應時間,減少用戶感知時間,提高用戶的滿意度。
3.1 數據訪問的優(yōu)化
對數據的訪問速度很大程度上影響應用系統(tǒng)的性能,如果被請求的頁面是一個靜態(tài)頁面或只有一小部分內容需要從數據庫中提取,則它的加載速度比那些需要從數據庫中大量讀取數據或不斷從數據庫接收和更新數據的頁面要快,因此,對于動態(tài)的頁面來說,對SQL層數據處理的優(yōu)化就顯得非常重要。在Web開發(fā)中,除了傳統(tǒng)的改善數據庫結構和優(yōu)化SQL語句外,主要從以下的幾個方面進行優(yōu)化。
3.1.1 使用XML技術
對于普通數據訪問數據庫而言,在數據量不大的情況下,一般性查詢在執(zhí)行速度上,不會有什么問題。每次數據提取需要1次網絡往返,這在應用程序處理海量結果集時會影響性能。比如每次查詢數據在十萬數量級,速度問題就會暴露出來。但是實際中發(fā)現(xiàn),在匯總統(tǒng)計查詢中,用戶查詢頻繁但變動并不大,因此可以考慮借助XML獲取數據來解決上述的問題。
采用XML技術,可將查詢的結果生成XML文件保存在Web服務器上,使客戶端能夠直接和XML文件進行交互,以節(jié)省訪問數據庫的資源;同時也可以將XML傳送到客戶端,在客戶端恢復為數據集,此后就可以直接在客戶端進行一些操作,而不必和服務器交互,建立非連接的數據訪問以節(jié)省時間。這里采用以下的算法過程利用XML技術實現(xiàn)對數據庫的訪問。
(1) 建立數據庫連接,生成查詢結果數據集(DataSet);
(2) 用XmlDataDocument將查詢結果集(DataSet)以XML形式保存在Web服務器的指定目錄下,同時斷開數據庫連接;
(3) 一旦用戶發(fā)送訪問請求,首先查詢Web服務器指定目錄下是否有滿足條件的XML文件,如果存在轉(4),否則轉(1);
(4) 創(chuàng)建XmlDataDocument對象,并用其Load方法加載該XML文件;
(5) 利用XPath或者XQuery查詢技術,查詢已加載的XML文件,生成相應的結果集。
從上面的過程可以看出,一旦有用戶發(fā)送查詢請求,首先將數據庫服務器中的數據轉化為XML文檔,保存在Web服務器上,然后查詢XML文件中的數據,獲取查詢結果。之后如果有新的請求查詢相同的記錄時,可以直接從Web服務器的XML文件中提取數據而不用再訪問數據庫。這對于用戶頻繁的查詢匯總操作中,優(yōu)勢非常明顯,且效率很高。這種思想在邏輯上將數據的生成和操作分開,同時節(jié)省了和數據庫服務器建立連接的時間,將其轉換為對服務器端XMl文件的讀取,有效地減輕了對系統(tǒng)數據庫服務器的負荷。
3.1.2 使用連接池
建立Web應用程序與數據庫之間的TCP連接時,DBMS需要為其分配多種資源,而在釋放連接時,DBMS需要釋放掉這些資源,分配和釋放資源都是比較耗時的工作,因此反復建立和釋放連接勢必會影響整個系統(tǒng)的性能。實際上,大多數應用程序僅使用1個或幾個不同的連接配置。這意味著在執(zhí)行應用程序期間,許多相同的連接將反復地打開和關閉。為了使打開的連接成本最低,ADO.NET使用連接池的優(yōu)化方法。
連接池技術能夠能重用到數據庫的連接,而不是每次請求都建立新的TCP連接,新連接僅在連接池中得不到連接時才建立。當連接被關閉時,它被返回到連接池中,在那里它仍然保持與數據庫的連接,與完全斷開TCP連接相反。池進程保持物理連接的所有權。通過為每個給定的連接配置保留一組活動連接來管理連接。只要用戶在連接上調用Open,池進程就會檢查池中是否有可用的連接。如果某個池連接可用,會將該連接返回給調用者,而不是打開新連接。應用程序在該連接上調用Close時,池進程會將連接返回到活動連接池集中,而不是真正關閉連接。連接返回到池中之后,即可在下一個Open調用中重復使用。
池連接可以大大提高應用程序的性能和可縮放性。默認情況下,ADO.NET中啟用連接池。除非顯式禁用,否則,連接在應用程序中打開和關閉時,池進程將對連接進行優(yōu)化。
3.2 表示層的數據顯示
對于優(yōu)化B/S下的數據顯示方面,主要考慮數據傳輸量的大小,數據傳輸量的大小是決定顯示響應速度的必要前提,這一點是B/S的弱項。數據傳輸量是指在客戶端Web瀏覽器和Web服務器之間傳送的數據量。在用VS.NET開發(fā)程序的過程中,通過減少網絡的通信量減少IE瀏覽器和Web服務器層之間的數據傳數量,縮短用戶感知時間。
3.2.1 使用緩存技術
合理有效地設計和使用緩存是優(yōu)化應用系統(tǒng)性能的重要手段,在基于Web的支持大量用戶的系統(tǒng)開發(fā)中,這一點尤為明顯。ASP.NET中的緩存能夠提供性能和伸縮性的最大效益、利用有效的緩存、可以避免Web服務器與數據庫之間的網絡往返,繞過占用很多資源的計算,并節(jié)省服務器資源,同時改善響應時間和等待時間。
ASP.NET的緩存服務是一種提高服務器性能、降低服務器資源浪費的有效方法。對于安全性要求高的應用程序,采用在 WEB 服務器上維護緩存數據的方式可以有效地提高頁面性能[2]。ASP.NET的緩存對各個應用來說是私有的,是存儲各種對象的存儲器,緩存的生存周期取決于應用的生存周期,當應用重新啟動時,緩存實際上已重建。
Cache實現(xiàn)了最近最少使用(least-recently-used)替換算法,允許ASP.NET強制Cache清除操作——如果可用內存下降到低水平——則自動從Cache中刪除不使用的項目。另外Cache支持依賴性到期特性,它能強制包括時間、鍵值、文件失效。其體系結構如圖3所示。
用ASP.NET內置的多級緩存功能,緩存訪問過的ASP.NET頁面,從而降低Web服務器的負載,并通過更高效地提供被緩存的文件而改善WEB系統(tǒng)的性能。ASP.NET提供了幾個級別的緩存。首先,當—個ASPX程序第一次被調用的時候會被編譯,編譯成功之后,生成的代碼會自動緩存,所以重復運行ASP.NET程序的效率會有很大的提高。除此之外,ASP.NET還提供輸出緩存(也叫頁面緩存)、數據緩存(也叫應用程序緩存)和碎片緩存(也叫部分頁面緩存)。
緩存提供一個簡單的字典接口,以便于對象放置到緩存中并在以后使用。最簡單的情況下,放置一個對象到緩存中,就如同對字典增加一個條目。在緩存策略上采用“文件和鍵值依賴”策略。從外部文件或者是其他緩存鍵值是否改變來決定本身鍵值是否有效。如果依賴發(fā)生改變,緩存對象將變得不可使用并從緩存中移動出來,從而更新緩沖。代碼如下:
//從數據庫文件中讀取數據
DataSet ds =new DataSet(;
FileStream fs=new FileStream(ServerMapPath(\"Records.xml\",F(xiàn)ileMode.Open,F(xiàn)ileAccess.Read;
StreamReader reader=new StreamReader(fs;
ds.ReadXml(reader;
fs.Close(;
Source=new DataView(ds.Tables[0];
//實現(xiàn)數據緩存
Cache.Insert(\"MyData\",Source,new System.Web.Caching.CacheDependency(ServerMapPath(\"Records.xml\";
3.2.2 避免服務器和客戶端的交互
HTTP是用于WWW客戶機和服務器之間進行信息傳輸的協(xié)議,它是一種請求響應類型的協(xié)議:客戶機向服務器發(fā)送請求,服務器收到請求后進行處理,對這個請求作出回答。Web瀏覽器包含了許多的HTTP請求,每一個請求對應一個小型文件,HTTP對每一個HTTP請求需要建立1個獨立的TCP連接。
因此,客戶端的每次請求將會引起客戶端和服務器間的一次通信,頻繁的操作勢必對系統(tǒng)的響應時間造成嚴重的影響。為避免不必要的TCP連接建立,通常只需在向服務器查詢或更新數據時才觸發(fā)客戶端與服務器之間的信息交互。能在客戶端執(zhí)行的數據操作應盡可能的用客戶端腳本(如Javascript實現(xiàn)。例如,對用戶輸入數據的校驗,應該盡量在客戶端進行校驗,再將數據提交給服務器。
3.2.3 利用DTO減少遠程調用次數
在分布式架構中,相關層在物理部署上實現(xiàn)分離,通過網絡或跨進程調用遠程對象或服務。在這種分布式架構中,必須先找到遠程對象位置,而且建立與遠程計算機的連接,然后才能將數據串行化為字節(jié)流,然后可能進行加密,最后才能將其傳輸到遠程計算機。遠程調用需要跨越網絡或進程,因此會比較慢。
避免遠程調用中固有的滯后時間問題的最佳方法是進行更少的調用,并讓每個調用傳遞更多的數據,這可以通過定義有效的數據傳輸對象(Data Transfer Object,DTO)來實現(xiàn)層與層之間的數據傳輸。
創(chuàng)建一個數據傳輸對象(DTO,用該對象包含遠程調用所需要的所有數據。修改遠程方法簽名,以便將DTO作為單個參數接受,并將單個DTO參數返回給客戶端。在調用方應用程序收到DTO并將其作為本地對象存儲之后,應用程序可以分別對DTO發(fā)出一系列單獨的過程調用,而不會引發(fā)遠程調用開銷。如圖4所示。
在圖4中,DTO允許遠程對象在單個遠程調用中將整個客戶名稱返回給客戶端,這就將調用次數從3次減為1次。客戶端進行單個調用,然后在本地與DTO交互,而不用進行多次遠程訪問服務器。通過使用DTO,在單一遠程調用中傳輸更多的數據信息,減少遠程調用的次數,提高分布式調用的性能。
4 測試結果及分析
以上方案已在開發(fā)系統(tǒng)中得到實際的應用,并取得了良好的效果。為了測試以上方案的有效性,這里選取系統(tǒng)中有代表的頁面,利用VS.NET中的ACT(Application Center Test)工具進行壓力測試。在不考慮網絡傳輸速度的情況下,分別測試原始頁面和改進后的頁面,得到表1詳細的測試結果:
從表1中可以看出,采用上述方案生成的頁面無論是在每秒平均請求數還是平均響應時間上,都有數量級的提高,極大地提高了系統(tǒng)的性能,縮短了Web頁面的響應時間,從而縮短用戶感知延遲時間,提高用戶的滿意度。
5 結 語
在B/S結構的開發(fā)中,響應時間是一個很重要的指標。本文針對Web應用程序的特點,從軟件處理數據的角度出發(fā),從優(yōu)化數據訪問以及Web數據顯示2方面提出了縮短Web響應時間方案,并利用ACT測試工具對實際應用進行壓力測試,發(fā)現(xiàn)此方案的可行性。除此之外,還可以通過優(yōu)化數據庫結構的設計,合理配置應用服務器所提供的性能優(yōu)化選擇,合理配置編譯器選項等方法對提高Web應用的總體性能。
參 考 文 獻
[1]ona Research,The Economic Impacts of Unacceptable Web-Site Download Speeds,April 1999.http://www.webperf.net/info/wp_downloadspeed.pdf.
[2]Cohen E,aplan H.Prefetching the Means for Document Transfer: A New Approach for Reducing Web Latency[A].Proceedings of the IEEE INFOCOM'2000[C].Piscataway(NJ: IEEE,2000,2:854-863.
[3]Habib M,Abrams M.Analysis of Sources of Latency in Downloading Web Pages[A].Proceedings of WebNetWorld Conference of the WWW,Internet,and Intranet[C].San Antonio(TX: IEEE,2000:227-232.
[4]Foygel D,Strelow D.Reducing Web Latency with Hierarchical Cache based Prefetching.in Proc.of the International Workshop on Scalable Web Services,(in conjunction with ICPP'00,Toronto,Ontario,Canada,2000:47-57.