|
新聞詳情
IIS優(yōu)化網(wǎng)站性能發(fā)表時(shí)間:2019-09-04 18:54 本文將引見(jiàn)一些方法用于優(yōu)化ASP.NET網(wǎng)站功用,這些方法都是不需求修改依次代碼的。 它們主要分為二個(gè)方面: 1. 應(yīng)用ASP.NET自身的擴(kuò)大性停止優(yōu)化。 2. <b>鞏義建網(wǎng)站</b>優(yōu)化IIS設(shè)置。 用緩存來(lái)優(yōu)化網(wǎng)站功用的方法,估計(jì)是無(wú)人不知的。ASP.NET供給了HttpRuntime.Cache對(duì)象來(lái)緩存數(shù)據(jù),也供給了OutputCache指令來(lái)緩存全部頁(yè)面輸入。 固然OutputCache指令應(yīng)用起來(lái)更便利,也有十分好的后果, 不外,它需求我們?cè)谀切╉?yè)面中添加如許一個(gè)指令。 關(guān)于設(shè)置過(guò)OutputCache的頁(yè)面來(lái)講,瀏覽器在收到這類(lèi)頁(yè)面的照顧后,會(huì)將頁(yè)面照顧內(nèi)容緩存起來(lái)。 只需在指定的緩存時(shí)間以?xún)?nèi),且用戶(hù)沒(méi)有強(qiáng)制刷新的操作,那么就基本不會(huì)再次懇求效勞端, 而關(guān)于來(lái)自其它的瀏覽器提議的懇求,假設(shè)緩存頁(yè)已生成,那么便可以直接從緩存中照顧懇求,加快照顧速度。 因此,OutputCache指令關(guān)于功用優(yōu)化來(lái)講,是很成心義的(除非一切頁(yè)面頁(yè)面都在頻繁更新)。 在網(wǎng)站的優(yōu)化階段,我們可以用Fiddler之類(lèi)的對(duì)象找出,給它們?cè)O(shè)置OutputCache, 然則,依照傳統(tǒng)的開(kāi)辟流程,我們需求針對(duì)每個(gè)頁(yè)面文件履行以下操作: 1. 簽出頁(yè)面文件。 2. 添加OutputCache指令。 3. 從新宣布頁(yè)面。 4. 簽入文件(假設(shè)碰到多分支并行,還能夠需求吞并操作)。 以上這些源代碼辦理制度會(huì)讓一個(gè)復(fù)雜的工作復(fù)雜化,那么,有沒(méi)一種更復(fù)雜的方法能處理這個(gè)后果呢? 接上去,本文將引見(jiàn)一種方法,它應(yīng)用ASP.NET自身的擴(kuò)大性,以設(shè)備文件的方法為頁(yè)面設(shè)置OutputCache參數(shù)。 設(shè)備文件其它就是一個(gè)XML文件,內(nèi)容以下: 看了這段設(shè)備,我想您應(yīng)當(dāng)也能猜到它能有甚么感化。 每行設(shè)備參數(shù)為一個(gè)頁(yè)面指定OutputCache所需求的參數(shù), 示例文件為了復(fù)雜只應(yīng)用二個(gè)參數(shù),其它可以支撐的參數(shù)請(qǐng)參考OutputCache指令。 為了能讓這個(gè)設(shè)備文件有效,需求在web.config中設(shè)備以下內(nèi)容(實(shí)用于IIS7): 在這里,我注冊(cè)了一個(gè)HttpModule,它的全部代碼以下: ConfigManager類(lèi)用于讀取設(shè)備文件,并啟用了文件依附技巧,當(dāng)設(shè)備文件更新后,依次會(huì)主動(dòng)從新加載: 有了AutoSetOutputCacheModule,我們便可以直接應(yīng)用設(shè)備文件為頁(yè)面設(shè)置OutputCache參數(shù),而不需求修改任何頁(yè)面,是否是很輕易應(yīng)用? 說(shuō)明:MyMVC框架已支撐這類(lèi)功用,一切相干的可以從MyMVC框架的源碼中獲得。 建議:關(guān)于一些很少修改的頁(yè)面,緩存頁(yè)是一種很有效的優(yōu)化方法。 每個(gè)網(wǎng)站都邑有一些資本文件(圖片,JS,CSS),這些文件相干于ASPX頁(yè)面來(lái)講, <b>庫(kù)客收集公司</b> 它們的輸入內(nèi)容極有能夠在一段長(zhǎng)時(shí)間以?xún)?nèi)不會(huì)有變更, 而IIS在照顧這類(lèi)資本文件時(shí)不會(huì)生成Cache-Control照顧頭。 在這類(lèi)狀況下,瀏覽器或許會(huì)緩存它們,或許會(huì)再次提議懇求(比如重啟后),總之就是緩存行動(dòng)不受控制且緩存時(shí)間不夠持久。 有沒(méi)有想過(guò)可以把它們?cè)跒g覽器中持久緩存起來(lái)呢? 為了通知瀏覽器將這些文件持久緩存起來(lái),增加一些成心義的懇求(提高頁(yè)面出現(xiàn)速度),我們可以在IIS中啟用內(nèi)容過(guò)時(shí), 如許設(shè)置后,IIS就可以生成Cache-Control照顧頭,明確通知瀏覽器將文件緩存多久。 在IIS6中,這個(gè)參數(shù)很好找到: 然則,在IIS7中,這個(gè)參數(shù)不輕易被發(fā)明,需求以下操作才華找到: 選擇網(wǎng)站(或許網(wǎng)站子目次)節(jié)點(diǎn),雙擊【HTTP照顧標(biāo)頭】 再點(diǎn)擊左邊的【設(shè)置經(jīng)常使用標(biāo)頭】鏈接, 此時(shí)將會(huì)顯示: 說(shuō)明: 留心:假設(shè)您在IIS7中針對(duì)某個(gè)子目次或許文件設(shè)置【啟用內(nèi)容過(guò)時(shí)】,前面的對(duì)話框看起來(lái)是千篇一律的, 然則,在IIS6中,我們可以清晰地從對(duì)話框的題目欄中知道我們?cè)谧錾趺矗? 有時(shí)真認(rèn)為IIS7的界面在退步! **我想說(shuō)一句: 說(shuō)到這里能夠有人會(huì)想:這個(gè)過(guò)不時(shí)間我該設(shè)置多久呢? 十分鐘,2個(gè)小時(shí),**,照樣一個(gè)月? 在我看來(lái),這個(gè)時(shí)間越久越好。 能夠有人又會(huì)說(shuō)了:萬(wàn)一我要升級(jí)某個(gè)JS文件如何辦,時(shí)間設(shè)置久了,用戶(hù)如何更新呢? 假設(shè)你問(wèn)我這個(gè)后果,我也只能說(shuō)是你的代碼不公道(究竟你處理不了升級(jí)后果),想知道啟事的話,請(qǐng)繼續(xù)瀏覽。 關(guān)于一些范圍不大年夜的網(wǎng)站來(lái)講,平日會(huì)將資本文件與依次文件一同安排到一個(gè)網(wǎng)站中。 這時(shí)候能夠會(huì)采取下面的方法來(lái)援用JS或許CSS文件: 在這類(lèi)狀況下,假設(shè)應(yīng)用了前面所說(shuō)的【啟用內(nèi)容過(guò)時(shí)】方法,那么當(dāng)有JS,CSS文件需求升級(jí)時(shí), 因?yàn)闉g覽器的緩存還沒(méi)有過(guò)時(shí),所以就不會(huì)懇求效勞器,此時(shí)會(huì)應(yīng)用已緩存的版本, 因此能夠會(huì)出現(xiàn)各類(lèi)奇異的BUG 關(guān)于前面談到的BUG,我認(rèn)為根源在于援用JS,CSS文件的方法有缺點(diǎn), 那種方法完整沒(méi)有思考到版本升級(jí)后果, 準(zhǔn)確的方法有二種: 1. 給文件名添加版本號(hào),像jquery那樣,每個(gè)版本一個(gè)文件(jquery-1.4.4.min.js)。 2. 在URL前面添加一個(gè)版本號(hào),讓本來(lái)的URL掉效。 **種方法因?yàn)槊看紊?jí)都發(fā)生了一個(gè)新文件,所以不存在緩存后果,然則,保護(hù)一大年夜堆文件的成本能夠會(huì)比擬大年夜, 因此我建議采取第二種方法來(lái)處理。 在MyMVC的示例代碼中,我應(yīng)用了下面的方法來(lái)援用這些資本文件: 在頁(yè)面運(yùn)轉(zhuǎn)時(shí),會(huì)發(fā)生以下的輸入結(jié)果: 這二個(gè)對(duì)象方法的實(shí)現(xiàn)代碼以下(在MyMVC的示例代碼中): 下面這類(lèi)獲得文件版本號(hào)的方法,是一種比擬復(fù)雜的處理計(jì)劃。 每個(gè)援用的中央在生成HTML代碼時(shí),都邑訪問(wèn)文件的**修改時(shí)間,這會(huì)給磁盤(pán)帶來(lái)一點(diǎn)讀的開(kāi)支, 假設(shè)您擔(dān)心這類(lèi)完成方法能夠會(huì)給功用帶來(lái)影響,那么也能夠添加一個(gè)設(shè)備文件的方法來(lái)處理(請(qǐng)自行完成), 例如以下結(jié)構(gòu): 假設(shè)您認(rèn)為這類(lèi)設(shè)備文件需求手工保護(hù),不夠主動(dòng)化,還可以采取依次的方法主動(dòng)在運(yùn)轉(zhuǎn)時(shí)保護(hù)一個(gè)列表, 總之,直接援用資本文件的方法是一種直接耦合,會(huì)給文件升級(jí)帶來(lái)費(fèi)事, 我們可以經(jīng)過(guò)一個(gè)外部方法來(lái)解開(kāi)這個(gè)直接耦合(給FileVersion添加一個(gè)屬性還還可以將外部地址改成一個(gè)CDN地址)。 壓縮照顧結(jié)果也是經(jīng)常使用的網(wǎng)站優(yōu)化方法,因?yàn)楝F(xiàn)在的瀏覽器都已支撐壓縮功用, 因此,假設(shè)在效勞端能壓縮照顧結(jié)果,關(guān)于網(wǎng)速較慢的用戶(hù)來(lái)講,會(huì)增加很多收集傳輸時(shí)間,終究的體驗(yàn)就是網(wǎng)頁(yè)顯示速度變快了! IIS6固然供給壓縮的設(shè)置界面,然則設(shè)備是基于效勞器級(jí)其余: 留心:這里的【應(yīng)用依次文件】不包羅aspx,假設(shè)需求壓縮aspx的照顧, 需求手工修改x:\WINDOWS\system32\inetsrv\MetaBase.xml文件(參考加大年夜字號(hào)局部): 說(shuō)明:要修改MetaBase.xml,需求中斷IIS Admin Service效勞。 在IIS7中,我們可以在效勞器級(jí)別設(shè)備壓縮參數(shù): 然后在每個(gè)網(wǎng)站中開(kāi)啟或許封閉壓縮功用: 說(shuō)明:IIS7中曾經(jīng)不再應(yīng)用MetaBase.xml,所以我們找不到IIS6的那些設(shè)置了。IIS7壓縮的過(guò)濾條件不再針對(duì)擴(kuò)大名,而是采取了mimeType規(guī)矩(保管在applicationHost.config)。 依據(jù)IIS7的壓縮規(guī)矩,當(dāng)我們啟用靜態(tài)壓縮后,會(huì)壓縮aspx的照顧結(jié)果。 二種壓縮方法的差異: 1. 靜態(tài)內(nèi)容壓縮:當(dāng)效勞器在**次照顧某個(gè)靜態(tài)文件時(shí),會(huì)生成一個(gè)壓縮后的結(jié)果,并保管到磁盤(pán)中,以便重用。 2. 靜態(tài)內(nèi)容壓縮:【每次】在照顧客戶(hù)端之前,壓縮照顧結(jié)果,在內(nèi)存中完成,因此會(huì)給CPU帶來(lái)一些擔(dān)當(dāng)。 留心:要不要【啟用靜態(tài)內(nèi)容壓縮】這個(gè)參數(shù),需求評(píng)價(jià)效勞器的CPU可否能以接受(不美觀察義務(wù)辦理器或許檢查功用計(jì)數(shù)器)。 對(duì)一個(gè)網(wǎng)站來(lái)講,ASP.NET供給的<b>鞏義SEO優(yōu)化</b> 有些HttpMoudle能夠其實(shí)不是需求的, 然則,。 比如 我 會(huì)禁用下面這些HttpMoudle: 關(guān)于應(yīng)用Forms身份認(rèn)證的網(wǎng)站的來(lái)講,下面這些HttpModule也是可以禁用的: 優(yōu)化ASP.NET網(wǎng)站是一個(gè)大年夜的話題,除博客中引見(jiàn)的這些方法以外,還有以下方法也是可以參考的: 1. 升級(jí)效勞器硬件設(shè)備。 2. 應(yīng)用Windows Server 2008以上版本操作系統(tǒng)(收集功用比2003要好)。 3. 優(yōu)化操作系統(tǒng)設(shè)備(例如禁用不需求的效勞)。 4. 禁用調(diào)試形式。 5. 網(wǎng)站應(yīng)用公用應(yīng)用依次池。 |