日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

ASP.NET站点性能提升-压缩

發(fā)布時間:2025/7/14 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET站点性能提升-压缩 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

壓縮協(xié)商

服務(wù)器怎么知道瀏覽器能夠接收壓縮內(nèi)容?瀏覽器怎么知道接收的內(nèi)容是壓縮過的?

當(dāng)支持壓縮的瀏覽器向服務(wù)器發(fā)送請求時,會包含一個Accept-Encoding請求頭,告訴服務(wù)器它支持的壓縮算法。例如:

?
1 Accept-Encoding: gzip,deflate

如果服務(wù)器響應(yīng)使用了壓縮,會在未壓縮的文件頭中包含一個響應(yīng)頭Content-Encoding,說明文件是怎么壓縮的:

?
1 Content-Encoding: gzip

然而,不僅僅瀏覽器和服務(wù)器發(fā)送和接收請求和響應(yīng),代理也會。并且,代理也可以緩存響應(yīng),然后從它的緩存中響應(yīng)后來的請求。當(dāng)代理緩存了一個壓縮后的文件,我們怎么確定代理不會發(fā)送這個壓縮后的文件給不能處理壓縮文件的瀏覽器。

IIS6和II7采取的方法是告訴代理只有當(dāng)請求與原請求有相同的Accept-Encoding請求頭時,才從緩存中響應(yīng)請求。當(dāng)啟用壓縮時,IIS6和IIS7在響應(yīng)中包含Vary頭:

?
1 Vary: Accept-Encoding

IIS6也允許通過元數(shù)據(jù)中的屬性重載壓縮文件Cache-Control和Expires頭。這允許禁用壓縮文件的代理緩存。IIS元數(shù)據(jù)在在IIS6中配置壓縮節(jié)的更新元數(shù)據(jù)子節(jié),重載Cache-Control和Expires頭的元數(shù)據(jù)屬性可以在以下位置找到:

  • HcCacheControlHeader? http://msdn.microsoft.com/en-us/library/ms525179(VS.90).aspx

在IIS7中配置壓縮

安裝動態(tài)內(nèi)容壓縮模塊

如果需要對動態(tài)文件使用壓縮,首先安裝動態(tài)內(nèi)容壓縮模塊。Vista/Windows 7或Windows Server 2008的安裝步驟有些不同:

  • 點擊Start | Administrative Tools | Server Manager。
  • 展開Roles,點擊Web Server(IIS)。
  • 滾動到Role Services,點擊Add Role Services,打開Add Role Services向?qū)А?/li>
  • 在Select Role Services頁面,滾動到Performance,選擇Dynamic Content Compression,選擇下一步。
  • 在Vista或Windows 7上:

  • 點擊Start | Control Panel | Programs | Turn Windows features on or off。Windows Features對話框會打開。
  • 展開Internet Information Service,展開World Wide Web Services,再展開Performance Features。選擇Http Compression Dynamic。
  • 啟用壓縮

  • 打開Internet Information Services (IIS) Manager。
  • 選擇機(jī)器,雙擊右側(cè)的Compression圖標(biāo)。
  • 壓縮窗口打開。窗口顯示以下項目:
    • Enable dynamic content compression: 除非服務(wù)器已經(jīng)使用了很多CPU,啟動動態(tài)內(nèi)容壓縮。
    • Enable static content compression: 壓縮的靜態(tài)內(nèi)容會被壓縮。所以只在初始壓縮時,會占用CPU周期。
    • Only compress files larger than (in bytes): 壓縮小文件可以會使得它更大。
    • Cache directory: 靜態(tài)文件的存儲位置。可以更換位置。確保驅(qū)動器是本地驅(qū)動器或NTFS分區(qū),并且沒有被壓縮或共享。
    • Per application pool disk space limit (in MB): 如果有很多應(yīng)用程序池,并且磁盤空間有限,可以調(diào)整。如果有100個應(yīng)用程序池,這個選項值為100MB,緩存靜態(tài)文件會使用100 * 100 MB = 10GB。
  • 針對站點、文件夾或文件設(shè)置壓縮

  • 打開IIS管理器,在左側(cè)點擊需要修改壓縮狀態(tài)的站點、文件夾或文件。
  • 切換中間的空格到Features View,雙擊Compression圖標(biāo)。
  • 打開的窗口中可以啟動或禁用動態(tài)或靜態(tài)文件的壓縮。
  • 壓縮等級

    壓縮等級超高,壓縮比率越大,CPU占用越大。

    靜態(tài)文件和動態(tài)文件的壓縮等級可以分別設(shè)置。對于靜態(tài)文件,使用9,最高等級。對于動態(tài)文件,壓縮等級4更好一點,可以參考:

    IIS 7 Compression. Good? Bad? How much?? http://weblogs.asp.net/owscott/archive/2009/02/22/iis-7-compression-good-bad-how-much.aspx.

    但是不同的網(wǎng)站最優(yōu)壓縮等級是不一樣的,這取決于空閑的CPU能力、頁面文件壓縮率、帶寬成本。進(jìn)行實驗選擇最優(yōu)的壓縮等級。

    設(shè)置壓縮等級:

  • 從命令行執(zhí)行:
    ?
    1 2 3 4 C:\Windows\System32\Inetsrv\Appcmd.exe? ??set config -section:httpCompression? ??-[name='gzip'].staticCompressionLevel:9 ??-[name='gzip'].dynamicCompressionLevel:4
  • 重啟IIS服務(wù)器。
  • 根據(jù)CPU利用率禁用壓縮

    為了確保壓縮沒有使CPU超載,IIS7每30秒計算平均CPU利用率。當(dāng)CPU利用率超過一個限制時,它會自動關(guān)閉壓縮。當(dāng)CPU利用率低于限制時, 它會重新啟用壓縮。

    限制的默認(rèn)值是:

    ?關(guān)閉壓縮重啟壓縮
    動態(tài)文件90%50%
    靜態(tài)文件100%50%

    注意這意味著如果服務(wù)器上的CPU一直在50%以上,但偶然高于90%,動態(tài)文件壓縮會被關(guān)閉,但再也不會重新開啟了。

    可以通過修改applicationHost.config文件修改這些限制,通常它在C:\Windows\System32\inetsrv\config文件夾下。

  • 找到<httpCompression>節(jié)。
  • 修改httpdynamicCompressionEnableCpuUsage屬性:
    ?
    1 <httpCompression dynamicCompressionEnableCpuUsage="70" .... >
  • 重啟IIS。
  • 如果需要修改其它限制,修改屬性:

    ?關(guān)閉壓縮重啟壓縮
    動態(tài)文件dynamicCompressionDisableCpuUsagedynamicCompressionEnableCpuUsage
    靜態(tài)文件staticCompressionDisableCpuUsagestaticCompressionEnableCpuUsage

    如果希望禁止IIS根據(jù)CPU利用率關(guān)閉壓縮,設(shè)置這些屬性值為100。

    與httpCompression一起使用的元素和屬性:

    • HTTP Compression <httpCompression>?
      http://www.iis.net/ConfigReference/system.webServer/httpCompression.

    設(shè)置靜態(tài)文件訪問頻率閾值

    只有當(dāng)靜態(tài)文件被頻繁請求時,IIS7才會壓縮靜態(tài)文件并將它放到緩存中。如果請求頻率不高,IIS7不會壓縮靜態(tài)文件,這樣可以節(jié)省CPU和緩存空間。

    默認(rèn)情況下,一個文件只有每10秒被請示2次或更多次時,才會被認(rèn)為是頻繁請求。這是在web.config的serverRuntime元素的兩個屬性決定的:

    serverRuntime屬性描述
    frequentHitThresholdNumber of times a URL must be requested within the time span specified in the frequentHitTimePeriod attribute to be considered frequently hit. Must be between 1 and 2147483647. Default is 2.
    frequentHitTimePeriodTime interval in which a URL must be requested the number of times specified in the frequentHitThreshold attribute before it is considered to be frequently hit. Default is 10 seconds.

    例如,指定靜態(tài)文件每隔15秒被請求7次,需要緩存,使用:

    ?
    1 2 3 4 5 6 7 8 <configuration> ... ??<system.webServer> ????<serverRuntime frequentHitThreshold="7" ??????frequentHitTimePeriod="00:00:15" /> ??</system.webServer> ... </configuration>

    緩存壓縮的動態(tài)文件

    IIS7只緩存靜態(tài)文件的壓縮版本,而動態(tài)文件在每次請求時進(jìn)行壓縮。這意味著壓縮動態(tài)文件比靜態(tài)文件占用更多的CPU。

    如果動態(tài)文件對每個訪問者都不同時,這是有意義的。但是,如果動態(tài)頁面對所有訪問者都一樣的,緩存它們的壓縮版本也是有意義的。

    在這種情況下可以使用ASP.NET OutputCache指令。這個方法的問題是,IIS默認(rèn)在輸出緩存中存儲文件的未壓縮版本。對于每個請求,IIS必須在發(fā)送到瀏覽器前壓縮緩存的內(nèi)容。這樣的效率很低。

    在輸出緩存中存儲壓縮的文件

    IIS緩存文件的壓縮版本,而不是未壓縮版本。這樣就不用在每次請求時都壓縮文件,減少了CPU的使用。

    因為使用了ASP.NET的輸出緩存,需要在頁面中加入OutputCache指令:

    ?
    1 <%@ OutputCache Duration="300" VaryByParam="none" %>
    然后,修改applicationHost.config文件,它通常在C:\Windows\System32\inetsrv\config文件夾中:
  • 找到<urlCompression>節(jié)。
  • 在urlCompression元素中加入 dynamicCompressionBeforeCache="true"屬性。
  • 重啟IIS。
  • 如果客戶端不接受壓縮后的內(nèi)存

    我們緩存了壓縮后的內(nèi)容,如果有一個訪問者使用不支持壓縮內(nèi)容的瀏覽器訪問了網(wǎng)站會發(fā)生什么?

    當(dāng)IIS收到請求不壓縮內(nèi)容的請求,會丟棄緩存中的壓縮內(nèi)容,重新生成內(nèi)容,并緩存未壓縮的內(nèi)容。它會一直使用未壓縮的內(nèi)容,直到緩存過期,即使客戶端能夠接受壓縮內(nèi)容。

    可以通過同時緩存壓縮和未壓縮版本解決這個問題。在OutputCache指令中加入VaryByContentEncoding:

    ?
    1 <%@ OutputCache Duration="300" VaryByParam="none" VaryByContentEncoding="gzip;deflate" %>
    在OutputCache指令中使用VaryByContentEncoding的一個缺點是這會禁用這個文件的內(nèi)核緩存。

    在IIS6中配置壓縮

    提高頁面的可壓縮性

    如果服務(wù)器使用了壓縮,優(yōu)化文本文件的可壓縮性是很有意義的。壓縮算法對重復(fù)內(nèi)容的效果最好:

    • 始終以同一順序指定HTML屬性。其中一個方法是使用高級web控件和自定義服務(wù)器控件生成HTML,不要使用低級HTML服務(wù)器控件。這會稍微提高CPU使用率,但會保證一致性,例如,使用
      <asp:Hyperlink runat="server"......>
      代替
      <a runat="server" .... >
    • 類似地,在CSS選擇器中,以字母順序書寫屬性。
    • 使用一致的大小寫。對HMTL標(biāo)簽和屬性使用小寫。
    • 使用一致的括號:不要混用”….”和’….’。

    更多資源

    • 10 Tips for Writing High-Performance Web Applications?
      http://msdn.microsoft.com/en-us/magazine/cc163854.aspx
    • Confguring HTTP Compression in IIS 7?
      http://technet.microsoft.com/en-us/library/cc771003(WS.10).aspx
    • IIS 6.0 Technical Reference?
      http://technet.microsoft.com/en-us/library/cc775635(WS.10).aspx
    • IIS Compression in IIS6.0?
      http://weblogs.asp.net/owscott/archive/2004/01/12/57916.aspx
    • Everything you ever wanted to know about compression, but were afraid to ask?
      http://geekswithblogs.net/JamesFleming/archive/2010/02/04/everything-you-ever-wanted-to-know-about-compression-but-were.aspx
    • Measuring the Performance Effects of Dynamic Compression in IIS 7.0?
      http://www.webperformanceinc.com/library/reports/iis7_compression/
    • Let's make the web faster?
      http://code.google.com/speed/articles/use-compression.html
    • Page Speed tool?
      http://code.google.com/speed/page-speed/download.html

    轉(zhuǎn)載于:https://www.cnblogs.com/xiaopohou/archive/2012/01/12/2320064.html

    總結(jié)

    以上是生活随笔為你收集整理的ASP.NET站点性能提升-压缩的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。