天天看點

建構高性能ASP.NET站點 第六章—性能瓶頸診斷與初步調優(下前篇)—簡單的優化

建構高性能ASP.NET站點 第六章—性能瓶頸診斷與初步調優(下前篇)—簡單的優化措施

    前言:本篇給出一些在部署ASP.NET站點時采用的簡單的優化措施。

    本篇議題如下:  

    識别和分析服務端的性能瓶頸(上)

   記憶體(前篇)

   緩存(前篇)

    CPU(前篇)

   處理請求線程(前篇)

提高性能的一些簡單改進措施(下)

         部署優化(前篇)

         減少不必要回傳(前篇)

         減少不必要的請求(後篇)

部署優化

我們都知道,不同的部署方式對站點的性能是有影響的,可能有些朋友已經知道了這點,不管怎樣,我們這裡還是詳細系統的講述一下這個問題,熟悉的朋友權當回顧J。

Release方式編譯項目

如果我們的項目是用Project的方式建立的,也就是說:我們的站點包含在一個Solution解決方案中,那麼在釋出之前,編譯項目的時候,采用release方式,這種方式會減少CPU的使用率。因為采用debug的方式釋出,編譯器會編譯後的代碼中加入很多的資訊,如調試資訊等。

操作步驟:

1.       在VS中,選擇” Build | Configuration Manager”.如下:

建構高性能ASP.NET站點 第六章—性能瓶頸診斷與初步調優(下前篇)—簡單的優化

2.       在”Active Solution Configuration”下拉框現在””Release”,然後”Close”.那麼Solution就以Release方式編譯。(其實使得Solution編譯為Release的方法很多,例如在Solution上面右擊”屬性”,然後去設定也是可以的)

建構高性能ASP.NET站點 第六章—性能瓶頸診斷與初步調優(下前篇)—簡單的優化

現在雖然Solution是Release方式了,但是如果我們去檢視這個Solution下面的ASP.NET站點程式的config檔案,發現還是deubg方式的。那麼我們在釋出站點的時候,需要手動的去修改為release。

注:如果Solution是以debug方式編譯,即使web.config設定了release,最後釋出的站點的代碼還是方式的。

站點釋出

釋出的步驟如下:

1.       修改web.config配置如下:

建構高性能ASP.NET站點 第六章—性能瓶頸診斷與初步調優(下前篇)—簡單的優化

2.       在站點上面右鍵選擇”Publish”.如下:

建構高性能ASP.NET站點 第六章—性能瓶頸診斷與初步調優(下前篇)—簡單的優化

    減少不必要的回傳

    我們都知道,從服務端到用戶端的回傳每次都是需要花費一定的時間的,而且加長了使用者等待的時間。是以有些回傳則是可免則免。 

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.       打開”開始”->”管理工具”->”伺服器管理”

建構高性能ASP.NET站點 第六章—性能瓶頸診斷與初步調優(下前篇)—簡單的優化

2.       在IIS上面添加”角色服務”

建構高性能ASP.NET站點 第六章—性能瓶頸診斷與初步調優(下前篇)—簡單的優化

3.       在”常見Http功能”下面選中”Http重定向”

建構高性能ASP.NET站點 第六章—性能瓶頸診斷與初步調優(下前篇)—簡單的優化

4.       然後安裝。

在Win7 上面,如下:

建構高性能ASP.NET站點 第六章—性能瓶頸診斷與初步調優(下前篇)—簡單的優化

然後,在我們的站點的web.config配置如下:

建構高性能ASP.NET站點 第六章—性能瓶頸診斷與初步調優(下前篇)—簡單的優化
建構高性能ASP.NET站點 第六章—性能瓶頸診斷與初步調優(下前篇)—簡單的優化

代碼

<configuration>

  <location path="OldPage.aspx">

    <system.webServer>

       <httpRedirect enabled="true" destination="NewPage.aspx" httpResponseStatus="Permanent" />

    </system.webServer>

  </location>

</configuration>

    今天就到這裡,多謝各位!