何蕾
【摘 要】越來越多的大中型網(wǎng)站都采用基于.NET的方式開發(fā)。從代碼、頁面、交互策略和數(shù)據(jù)庫訪問性能等方面對基于.NET的大中型網(wǎng)站的性能優(yōu)化進行了研究。
【關(guān)鍵詞】.NET;大中型網(wǎng)站;數(shù)據(jù)庫訪問;網(wǎng)站性能;優(yōu)化策略
Research on the Optimization of Large and Medium Sized Websites Based on.NET
HE Lei
(Guangzhou College of Commerce, Guangzhou Guangdong 511363, China)
【Abstract】More and more large and middle scale websites are developed based on .NET. This paper studies the performance of large and medium - sized websites based on .NET from the aspects of code, page, interaction strategy and database access.
【Key words】.NET; Large and medium website; Database access; Website performance; Optimization strategy
隨著計算機性能、網(wǎng)絡(luò)技術(shù)的不斷提高,以及高性能寬帶的大規(guī)模普及,人們訪問網(wǎng)站的速度越來越快,計算機處理網(wǎng)頁功能的能力也越來越強,以至于使很多人都進入了一個誤區(qū):現(xiàn)在開發(fā)網(wǎng)站,主要精力應(yīng)該放在頁面設(shè)計和功能的實現(xiàn)上,而性能的優(yōu)化已經(jīng)無足輕重。這種想法在開發(fā)訪問量和數(shù)據(jù)量小的小型網(wǎng)站的時候可能危害還不明顯,但在開發(fā)訪問量和數(shù)據(jù)量極大的大中型網(wǎng)站時就存在著極大的隱患了,很可能造成網(wǎng)站的反應(yīng)速度慢,甚至在并發(fā)量高的時候造成網(wǎng)站的崩潰。
Microsoft .NET憑著平臺無關(guān)性、多開發(fā)語言支持、豐富的類庫以及強大的Web Service功能等特性,成為了目前大部分的大中型網(wǎng)站首先的方法。因此,加強對基于.NET的大中型網(wǎng)站的性能優(yōu)化研究就顯得非常必要和有意義了。
1 Microsoft .NET概述
Microsoft .NET是微軟開發(fā)的以Web services為核心的新一代技術(shù)平臺,通過這個平臺,各種互聯(lián)網(wǎng)上的應(yīng)用程序可以進行互聯(lián),而無需理會這些應(yīng)用程序是用什么編程語言開發(fā)的、是運行在哪種設(shè)備和操作系統(tǒng)上。開發(fā)人員可以使用C#、VB、VC++和java等語言來開發(fā)各種基于.NET的應(yīng)用程序,編譯后的應(yīng)用程序可以運行在裝有.NET Framework的任意平臺上,實現(xiàn)一次編譯、到處運行的思想。
2 大中型網(wǎng)站的性能優(yōu)化
大中型網(wǎng)站大都基于Microsoft.NET開發(fā)的,而開發(fā)的語言則不盡相同。要提高這些網(wǎng)站的性能,可以從代碼、頁面設(shè)計、交互策略和數(shù)據(jù)庫連接等方面去優(yōu)化。
2.1 優(yōu)化代碼,提高代碼執(zhí)行效率
代碼具有很大的靈活性,實現(xiàn)某一個功能,可能會有很多種編碼方式,如果能夠選擇最好的實現(xiàn)方式,則可以提高代碼的執(zhí)行效率,從而提高網(wǎng)頁的反應(yīng)速度。
1)使用Foreach代替for語句
在C#中,foreach的平均執(zhí)行時間只是for語句的30%,執(zhí)行效率遠高于for語句。所以,當foreach和for都可以達到效果的話,就建議采用foreach了。
2)多使用泛型集合
.NET從2.0版本開始,提供了一種強類型——泛型。泛型集合不會出現(xiàn)封箱和拆箱的情況,從而提高了代碼的性能。
3)注意常量和變量的定義
聲明字符串容器這類常量時,盡量避免采用把字符放進雙引號中的做法,建議采用先把字符串定義為一個常量,然后把常量賦值給字符串容器。而對于循環(huán)體要用到的變量,建議在循環(huán)體外進行聲明,然后在循環(huán)體內(nèi)進行初始化。
4)合理使用字符串函數(shù)
當要對字符串進行不區(qū)分大小的比較時,盡量不采用先用UpperCase和Lowercase轉(zhuǎn)換后再比較的方式,而是直接用String.Compare來進行比較,因為這個函數(shù)不區(qū)分大小寫。
字符串的連接使用是非常頻繁的,很多人習(xí)慣性的用連接符“+”對string對象進行連接,但這種方法比較浪費資源,因為每個string對象被創(chuàng)建后是只讀的,每次對string賦值實質(zhì)上都是創(chuàng)建了新的string對象。因此,在.NET中,可以使用StringBuilder類中的Insert、Remove和Append等方法來對字符串實行插入、移除和連接等各種操作,這種方法比使用連接符“+”更節(jié)省資源,從而可以提高網(wǎng)站性能。
2.2 優(yōu)化頁面設(shè)計,加快頁面響應(yīng)速度
在網(wǎng)站開發(fā)中,好的頁面設(shè)計,特別是優(yōu)化的HTML,可以大大加快頁面加載速度,減輕服務(wù)器負擔(dān),從而提高網(wǎng)站的性能,提高用戶體驗。
1)減少頁面加載對象的HTTP請求數(shù)量
當一個網(wǎng)頁被打開時,瀏覽器會發(fā)出加載圖片、腳本等對象的加載請求,每個請求都需要響應(yīng)時間,如果加載的請求太多,會造成頁面顯示出現(xiàn)延遲,浪費了瀏覽者的時間。要減少HTT請求數(shù)量,可以從以下幾個方面進行優(yōu)化:
將多個JS文件或CSS文件合并為一個文件,如將body.css、side.css、footer.css合并為style.css,這樣就將3個HTTP請求變成為1個HTTP請求。
將框架各部分的圖片合并為一張圖片,加載后使用CSS的背景切割功能來實現(xiàn),這樣可以加快圖片的顯示。
將腳本、CSS和圖片等文件緩存在本地的Cache中,這樣可以直接在本地調(diào)用,而不用再發(fā)送HTTP加載請求。
2)減小加載文件的大小,減少數(shù)據(jù)傳送量
減小JS和CSS文件的大?。涸贘S或CSS文件中盡量使用簡短的變量名稱,刪除注釋、空白內(nèi)容和無意義換行等,還可以利用服務(wù)器端的GZIP來壓縮JS和CSS文件的大小。
減小頁面內(nèi)容:刪除頁面上冗余的空語句、空白行、注釋、多余的符號和重復(fù)的頁面元素的屬性設(shè)置等內(nèi)容。
減小頁面資源的大?。含F(xiàn)在頁面包含的圖片、視頻、音頻和動畫等各種多媒體資源越來越多,盡量少用或者在不影響效果的前提下使用較小的頁面資源會大大加快網(wǎng)頁瀏覽速度。
3)使用良好的頁面設(shè)計習(xí)慣,加快頁面的解釋和加載速度
有些良好的頁面設(shè)計習(xí)慣也能加快網(wǎng)頁的響應(yīng)速度,如:同一個超鏈接URL字符串在不同頁面、不同位置保持大小寫完全一致;編寫HTML代碼時,保證各種標記有頭有尾;用表格布局頁面時,不要把整個頁面放在同一個表格當中,而要將頁面分割成幾個表格來布局,這樣就避免了因為表格的一部分內(nèi)容無法訪問而影響了整個頁面的顯示;不要把javascript房子HTML前面,這樣會導(dǎo)致瀏覽器在處理javascript時影響后面網(wǎng)頁的顯示,所以,最好的辦法是把javascript放到HTML的后面。
2.3 優(yōu)化交互方式,減少服務(wù)器負載
1)盡量使用靜態(tài)頁面
動態(tài)頁面使得網(wǎng)頁與用戶的交互變得非常方便靈活,也使得網(wǎng)頁內(nèi)容的變動變得簡單方便。但動態(tài)頁面需要服務(wù)器對數(shù)據(jù)庫進行各種操作,無疑增加了服務(wù)器的工作量,會使網(wǎng)頁響應(yīng)速度明顯放慢。因此,當對于經(jīng)常要進行查詢而內(nèi)容又變化很少的部分,采用HTML靜態(tài)化策略可以大大減少數(shù)據(jù)庫的訪問量。
2)盡量在客戶端驗證用戶信息
在用戶登錄或注冊頁面,經(jīng)常要對用戶輸入的內(nèi)容進行合法性、格式、長度以及邏輯等方面進行驗證。.NET提供了相關(guān)的類庫,讓開發(fā)人員省事不少。但這種驗證方法都需要回傳服務(wù)器(下轉(zhuǎn)第94頁)(上接第77頁)去處理,降低了網(wǎng)站的性能。所以,應(yīng)該盡量采用JS腳本的方式在客戶端進行驗證。
3)關(guān)閉非必須的Session功能
Session的作用是將用戶的信息保存在服務(wù)器上,當有些頁面需要用戶授權(quán)時,就會查詢session的狀態(tài),但每次這樣的查詢都會訪問服務(wù)器,當大中型網(wǎng)站并發(fā)量大,要使用session狀態(tài)查詢的頁面非常多時,對網(wǎng)站的性能就會造成一定的影響。所以,當有些頁面沒必要進行用戶授權(quán)確認時,最好關(guān)閉session狀態(tài)。在HTML中關(guān)閉session的方法是:page enablesessionstate=”false”。
2.4 優(yōu)化數(shù)據(jù)庫訪問性能
網(wǎng)頁,特別是動態(tài)網(wǎng)頁需要頻繁地訪問數(shù)據(jù)庫,而對于大中型網(wǎng)站來說,由于用戶并發(fā)量大,頁面功能多,對數(shù)據(jù)庫的訪問量是相當巨大的,因此,對數(shù)據(jù)庫的訪問性能進行優(yōu)化就顯得非常必要。
1)使用合適的數(shù)據(jù)供應(yīng)器
.NET提供了多種數(shù)據(jù)供應(yīng)器,這些數(shù)據(jù)供應(yīng)器是訪問數(shù)據(jù)庫的基礎(chǔ)。比較常用的數(shù)據(jù)供應(yīng)器OLE DB和SQL Server。其中OLE DB主要用于ACCESS、SQL Server、Oracle等數(shù)據(jù)庫,SQL Server則是用于SQL Server7.0以上版本的數(shù)據(jù)庫。.NET為不同類型的數(shù)據(jù)庫提供了特定的程序,因此。建議不同類型的數(shù)據(jù)庫選擇特定的數(shù)據(jù)供應(yīng)器,這樣會大大提高數(shù)據(jù)庫的訪問性能。
2)及時關(guān)閉已完成的連接
在大中型網(wǎng)站中,由于訪問量巨大,數(shù)據(jù)庫連接的對象是非常珍貴的,為了能夠充分利用這些對象,已經(jīng)打開的數(shù)據(jù)庫連接,應(yīng)該在其使用完后馬上關(guān)閉連接,避免浪費系統(tǒng)資源。
3)充分利用數(shù)據(jù)庫的存儲過程
存儲過程是已經(jīng)編譯好的存儲在服務(wù)器上的SQL語句,善于利用存儲過程可以避免重復(fù)分析和編譯SQL命令,提高了網(wǎng)站的時效和性能。
此外,為表建立合適的索引、靈活使用視圖、少用游標等等措施都能提高數(shù)據(jù)庫的訪問性能。
3 總結(jié)
從代碼、頁面設(shè)計和數(shù)據(jù)庫訪問等等方面對基于.NET的大中型網(wǎng)站進行優(yōu)化,就一可以大大提高系統(tǒng)性能,解決訪問量和并發(fā)量巨大帶來的問題。
【參考文獻】
[1]石建斌,劉倩倩.基于用戶體驗優(yōu)化的團購網(wǎng)站導(dǎo)購策略研究[J].電子商務(wù),2014,10.
[2]張?zhí)斓?網(wǎng)站鏈接數(shù)據(jù)分析與優(yōu)化研究[J].牡丹江師范學(xué)院學(xué)報:自然科學(xué)版,2014,4.
[4][美]Adam Sills,Mesbah Ahmed,等.XML.NET編程指南[M].電子工業(yè)出版社,2003,1.
[責(zé)任編輯:湯靜]