建構高性能ASP.NET站點 第六章—性能瓶頸診斷與初步調優(下前篇)—簡單的優化措施
前言:本篇給出一些在部署ASP.NET站點時采用的簡單的優化措施。
本篇議題如下:
識别和分析服務端的性能瓶頸(上)
記憶體(前篇)
緩存(前篇)
CPU(前篇)
處理請求線程(前篇)
提高性能的一些簡單改進措施(下)
部署優化(前篇)
減少不必要回傳(前篇)
減少不必要的請求(後篇)
部署優化
我們都知道,不同的部署方式對站點的性能是有影響的,可能有些朋友已經知道了這點,不管怎樣,我們這裡還是詳細系統的講述一下這個問題,熟悉的朋友權當回顧J。
Release方式編譯項目
如果我們的項目是用Project的方式建立的,也就是說:我們的站點包含在一個Solution解決方案中,那麼在釋出之前,編譯項目的時候,采用release方式,這種方式會減少CPU的使用率。因為采用debug的方式釋出,編譯器會編譯後的代碼中加入很多的資訊,如調試資訊等。
操作步驟:
1. 在VS中,選擇” Build | Configuration Manager”.如下:
2. 在”Active Solution Configuration”下拉框現在””Release”,然後”Close”.那麼Solution就以Release方式編譯。(其實使得Solution編譯為Release的方法很多,例如在Solution上面右擊”屬性”,然後去設定也是可以的)
現在雖然Solution是Release方式了,但是如果我們去檢視這個Solution下面的ASP.NET站點程式的config檔案,發現還是deubg方式的。那麼我們在釋出站點的時候,需要手動的去修改為release。
注:如果Solution是以debug方式編譯,即使web.config設定了release,最後釋出的站點的代碼還是方式的。
站點釋出
釋出的步驟如下:
1. 修改web.config配置如下:
2. 在站點上面右鍵選擇”Publish”.如下:
減少不必要的回傳
我們都知道,從服務端到用戶端的回傳每次都是需要花費一定的時間的,而且加長了使用者等待的時間。是以有些回傳則是可免則免。
Server.Transfer Vs Response.Redirect
如果我們需要在服務端把使用者定向到另外的一個頁面,那麼考慮一下:盡量使用Server.Transfer,而不是使用Response.Redirect。
因為當使用Response.Redirect的時候,服務端會向用戶端的浏覽器發送一個響應:告訴浏覽器去加載轉向的那個頁面。然後浏覽器再次發送請求到服務端去請求另外的那個頁面。
當我們使用Server.Transfer的時候,服務端就立刻執行跳轉。這樣做的一個不好的地方可能就是:此時請求的是A.aspx,其實服務端已經跳轉到了B.aspx頁面,但是浏覽器上面的Url還是顯示的A.aspx。
當使用Server.Transfer需要注意:确定每次通路A頁面都需要跳轉到B頁面的時候,就是用Server.Transfer。例如,拿部落格園來舉例,當使用者在沒有登入的時候想對正在閱讀的一篇文章評論,那麼此時,頁面就會跳轉到Login的登陸頁面,登陸之後,頁面就跳轉到之前看文章的那個頁面,然後寫評論。此時的這個跳轉就不适合用Server.Transfer,而采用Response.Redirect。如果不管使用者在哪裡,隻要使用者登陸,那麼總是跳到一個固定的頁面,那麼就可以使用Server.Transfer。
還有就是Server.Transfer畢竟會消耗服務端的資源,使用的時候要注意。
通過上面可以看出:調優本來就是一個折中的過程,不是絕對的。調優最後說到底就是”時空轉換—時間換空間,空間換時間”。
聲明站點的預設頁面
當我們請求一個站點的時候,如http://domain/folder,IIS會自動進行一些重定向到http://domain/folder/。同時,http.sys也不會把沒有聲明預設頁面的站點的預設首頁加入到核心的緩存中(可能說的有點的繞),例如,如果在程式中,我們設定站點的預設頁面時Default.aspx,但是我們在部署到IIS的時候,沒有配置Default.aspx就是站點的預設頁面,那麼這個頁面的内容不會被http.sys緩存到核心中。是以為了避免IIS重定向和允許http.sys緩存頁面,我們在IIS中要配置站點的預設頁面(或者每次在浏覽器中輸入http://domain/folder/default.aspx,但是我們不能控制使用者的行為,是以這招這幾乎不可能)
永久跳轉相關話題
如果我們站點的某個頁面過期了或者不再用了,那麼我們就可以采用301永久跳轉。當服務端向用戶端發出301響應的時候,浏覽器和代理都會去更新他們的緩存(如果之前的舊頁面采用了緩存),而且搜尋引擎也會采用新的頁面。
要讓服務端向用戶端發送301響應,如下的方式:
1.代碼:
Response.StatusCode = 301;
Response.AddHeader("Location", "NewPage.aspx");
Response.End();
在ASP.NET 4.0 及以後的版本:
Response.RedirectPermanent("NewPage.aspx");
2. IIS配置
a) IIS 6配置
1. 在IIS中站點中,選中你想跳轉的檔案或者目錄。
2. 選中”A redirection to a URL”
3. 然後輸入你想跳轉到的頁面。
4. 然後選中”The exact url entered above”和”A permanent redirect for this resource”。
b) IIS 7
在Server 2008上面
1. 打開”開始”->”管理工具”->”伺服器管理”
2. 在IIS上面添加”角色服務”
3. 在”常見Http功能”下面選中”Http重定向”
4. 然後安裝。
在Win7 上面,如下:
然後,在我們的站點的web.config配置如下:
代碼
<configuration>
<location path="OldPage.aspx">
<system.webServer>
<httpRedirect enabled="true" destination="NewPage.aspx" httpResponseStatus="Permanent" />
</system.webServer>
</location>
</configuration>
今天就到這裡,多謝各位!