編寫(xiě)高性能 Web 應用程序的 10 個(gè)技巧 軟件測試
編寫(xiě)高性能 Web 應用程序的 10 個(gè)技巧 轉自微軟資料
數據層性能
技巧 1 — 返回多個(gè)結果集
技巧 2 — 分頁(yè)的數據訪(fǎng)問(wèn)
技巧 3 — 連接池
技巧 4 — ASP.NET 緩存 API
技巧 5 — 每請求緩存
技巧 6 — 后臺處理
技巧 7 — 頁(yè)輸出緩存和代理服務(wù)器
技巧 8 — 運行 IIS 6.0(只要用于內核緩存)
技巧 9 — 使用 Gzip 壓縮
技巧 10 — 服務(wù)器控件視圖狀態(tài)
小結
====================================================
使用 ASP.NET 編寫(xiě) Web 應用程序的簡(jiǎn)單程度令人不敢相信。正因為如此簡(jiǎn)單,所以很多開(kāi)發(fā)人員就不會(huì )花時(shí)間來(lái)設計其應用程序的結構,以獲得更好的性能了。在本文中,我將講述 10 個(gè)用于編寫(xiě)高性能 Web 應用程序的技巧。但是我并不會(huì )將這些建議僅局限于 ASP.NET 應用程序,因為這些應用程序只是 Web 應用程序的一部分。本文不作為對 Web 應用程序進(jìn)行性能調整的權威性指南 — 一整本書(shū)恐怕都無(wú)法輕松講清楚這個(gè)問(wèn)題。請將本文視作一個(gè)很好的起點(diǎn)。
成為工作狂之前,我原來(lái)喜歡攀巖。在進(jìn)行任何大型攀巖活動(dòng)之前,我都會(huì )首先仔細查看指南中的路線(xiàn),閱讀以前游客提出的建議。但是,無(wú)論指南怎么好,您都需要真正的攀巖體驗,然后才能?chē)L試一個(gè)特別具有挑戰性的攀登。與之相似,當您面臨修復性能問(wèn)題或者運行一個(gè)高吞吐量站點(diǎn)的問(wèn)題時(shí),您只能學(xué)習如何編寫(xiě)高性能 Web 應用程序。
我的個(gè)人體驗來(lái)自在 Microsoft 的 ASP.NET 部門(mén)作為基礎架構程序經(jīng)理的經(jīng)驗,在此期間我運行和管理www.ASP.NET,幫助設計社區服務(wù)器的結構,社區服務(wù)器是幾個(gè)著(zhù)名 ASP.NET 應用程序(組合到一個(gè)平臺的 ASP.NET Forums、.Text 和 nGallery)。我確信有些曾經(jīng)幫助過(guò)我的技巧對您肯定也會(huì )有所幫助。
您應該考慮將應用程序分為幾個(gè)邏輯層。您可能聽(tīng)說(shuō)過(guò) 3 層(或者 n 層)物理體系結構一詞。這些通常都是規定好的體系結構方式,將功能在進(jìn)程和/或硬件之間進(jìn)行了物理分離。當系統需要擴大時(shí),可以很輕松地添加更多的硬件。但是會(huì )出現一個(gè)與進(jìn)程和機器跳躍相關(guān)的性能下降,因此應該避免。所以,如果可能的話(huà),請盡量在同一個(gè)應用程序中一起運行 ASP.NET 頁(yè)及其相關(guān)組件。
因為代碼分離以及層之間的邊界,所以使用 Web 服務(wù)或遠程處理將會(huì )使得性能下降 20% 甚至更多。
數據層有點(diǎn)與眾不同,因為通常情況下,最好具有專(zhuān)用于數據庫的硬件。然而進(jìn)程跳躍到數據庫的成本依然很高,因此數據層的性能是您在優(yōu)化代碼時(shí)首先要考慮的問(wèn)題。
在深入應用程序的性能修復問(wèn)題之前,請首先確保對應用程序進(jìn)行剖析,以便找出具體的問(wèn)題所在。主要性能計數器(如表示執行垃圾回收所需時(shí)間百分比的計數器)對于找出應用程序在哪些位置花費了其主要時(shí)間也非常有用。然而花費時(shí)間的位置通常非常不直觀(guān)。
本文講述了兩種類(lèi)型的性能改善:大型優(yōu)化(如使用 ASP.NET 緩存),和進(jìn)行自身重復的小型優(yōu)化。這些小型優(yōu)化有時(shí)特別有意思。您對代碼進(jìn)行一點(diǎn)小小的更改,就會(huì )獲得很多很多時(shí)間。使用大型優(yōu)化,您可能會(huì )看到整體性能的較大飛躍。而使用小型優(yōu)化時(shí),對于某個(gè)特定請求可能只會(huì )節省幾毫秒的時(shí)間,但是每天所有請求加起來(lái),則可能會(huì )產(chǎn)生巨大的改善。
數據層性能
談到應用程序的性能調整,有一個(gè)試紙性的測試可用來(lái)對工作進(jìn)行優(yōu)先級劃分:代碼是否訪(fǎng)問(wèn)數據庫?如果是,頻率是怎樣的?請注意,這一相同測試也可應用于使用 Web 服務(wù)或遠程處理的代碼,但是本文對這些內容未做講述。
如果某個(gè)特定的代碼路徑中必需進(jìn)行數據庫請求,并且您認為要首先優(yōu)化其他領(lǐng)域(如字符串操作),則請停止,然后執行這個(gè)試紙性測試。如果您的性能問(wèn)題不是非常嚴重的話(huà),最好花一些時(shí)間來(lái)優(yōu)化一下與數據庫、返回的數據量、進(jìn)出數據庫的往返頻率相關(guān)的花費時(shí)間。
了解這些常規信息之后,我們來(lái)看一下可能會(huì )有助于提高應用程序性能的十個(gè)技巧。首先,我要講述可能會(huì )引起最大改觀(guān)的更改。
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/