明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

改進(jìn)性能與樣式的 25+ ASP 技巧(4)

[摘要]技巧 21:?jiǎn)⒂脼g覽器和代理緩存 默認(rèn)情況下,ASP 禁用瀏覽器和代理中的緩存。這將很有意義,因?yàn)?ASP 生來(lái)就是動(dòng)態(tài)的,具有潛在地對(duì)時(shí)間敏感的信息。如果有一個(gè)不需要對(duì)每次查看進(jìn)行刷新的頁(yè),則應(yīng)該...
技巧 21:?jiǎn)⒂脼g覽器和代理緩存

默認(rèn)情況下,ASP 禁用瀏覽器和代理中的緩存。這將很有意義,因?yàn)?ASP 生來(lái)就是動(dòng)態(tài)的,具有潛在地對(duì)時(shí)間敏感的信息。如果有一個(gè)不需要對(duì)每次查看進(jìn)行刷新的頁(yè),則應(yīng)該啟用瀏覽器和代理緩存。這使得瀏覽器和代理能在某一段時(shí)間內(nèi),使用某一頁(yè)的緩存副本,這時(shí)間的長(zhǎng)短可以控制。緩存能明顯減輕服務(wù)器負(fù)荷,使用戶的感受好一些。

哪種動(dòng)態(tài)頁(yè)可以緩存?舉例說(shuō)明:

天氣頁(yè),每 5 分鐘更新一次。
列出新聞的主頁(yè)或新聞發(fā)布的主頁(yè),每天更新 2 次。
公共基金運(yùn)營(yíng)列表,基本的統(tǒng)計(jì)數(shù)小時(shí)更新 1 次。
請(qǐng)注意,使用瀏覽器或代理緩存,只有很少的命中被記錄到 Web 服務(wù)器上。如果想精確測(cè)量所有頁(yè)面查看或者張貼廣告,也許不喜歡使用瀏覽器和代理緩存。

瀏覽器緩存是由 Web 服務(wù)器發(fā)往瀏覽器的 HTTP 截至期限標(biāo)題控制的。ASP 提供了兩種發(fā)送標(biāo)題的機(jī)制。要將頁(yè)面設(shè)置為在未來(lái)某個(gè)分鐘數(shù)后過(guò)期,請(qǐng)?jiān)O(shè)置 Response.Expires 屬性。以下的例子通知瀏覽器:內(nèi)容在 10 分鐘后過(guò)期:

<% Response.Expires = 10 %>

設(shè)置 Response.Expires 為負(fù)數(shù)或 0 則禁用緩存。一定要使用較大的負(fù)數(shù),例如 -1000 (大于一天),來(lái)克服服務(wù)器時(shí)鐘和瀏覽器時(shí)鐘之間的差異。第二個(gè)屬性 Response.ExpiresAbsolute,允許設(shè)置內(nèi)容過(guò)期的指定時(shí)間:

<% Response.ExpiresAbsolute = #May 31,2001 13:30:15# %>

如果不想使用 Response 對(duì)象設(shè)置過(guò)期時(shí)間,可以將 <META> 標(biāo)記寫入 HTML,通常寫在 HTML 文件的 <HEAD> 內(nèi)部。一些瀏覽器會(huì)響應(yīng)這條指令,但代理不會(huì)。

<META HTTP-EQUIV="Expires" VALUE="May 31,2001 13:30:15">

最后,可以標(biāo)識(shí)內(nèi)容對(duì) HTTP 代理緩存是否有效,請(qǐng)使用 Response.CacheControl 屬性。設(shè)置屬性為“Public”,允許代理緩存內(nèi)容。

<% Response.CacheControl = "Public" %>

默認(rèn)情況下,該屬性設(shè)置為“Private”。注意,不應(yīng)當(dāng)為顯示某用戶專用數(shù)據(jù)的頁(yè)啟用代理緩存,因?yàn)榇硪苍S為屬于其他用戶的用戶頁(yè)面服務(wù)。

技巧 22:盡可能使用 Server.Transfer 替代 Response.Redirect

Response.Redirect 通知瀏覽器,請(qǐng)求一個(gè)不同的頁(yè)面。該函數(shù)經(jīng)常用于重定向用戶到登錄或錯(cuò)誤頁(yè)面。既然重定向強(qiáng)制一個(gè)新頁(yè)請(qǐng)求,瀏覽器就必須做兩次到 Web 服務(wù)器的往返,而且 Web 服務(wù)器必須處理額外的請(qǐng)求。IIS 5.0 引入一個(gè)新的函數(shù),Server.Transfer,該函數(shù)執(zhí)行傳送到相同服務(wù)器上的不同 ASP 頁(yè)。這樣避免了額外的、從瀏覽器到 Web 服務(wù)器的往返,從而改善了整體系統(tǒng)性能,同時(shí)改善了對(duì)用戶的響應(yīng)時(shí)間。請(qǐng)查看重定向中的新方向(英文),它討論了 Server.Transfer 和 Server.Execute。

也可以查看Leveraging ASP in IIS 5.0中有關(guān) IIS 5.0 和 ASP 3.0 新功能的完全列表。(英文)

技巧 23:在目錄 URL 尾部加斜線

相關(guān)的技巧是,一定要定在指向目錄的 URL 尾部加斜線 (/)。如果省略了斜線,瀏覽器將向服務(wù)器提出請(qǐng)求,僅通知它正尋找一個(gè)目錄。然后瀏覽器發(fā)出第二個(gè)請(qǐng)求,在 URL 末尾添加斜線,然后服務(wù)器將那個(gè)目錄的默認(rèn)文檔作為響應(yīng),或者如果沒(méi)有默認(rèn)文檔并且目錄瀏覽已被啟用,就以目錄列表作為響應(yīng)。添加了斜線便省去了第一個(gè)沒(méi)用的往返。出于對(duì)用戶的友好,也許想要在顯示的名稱的末尾省略斜線。

例如,寫:

<a href="http://msdn.microsoft.com/workshop/" title="MSDN Web
Workshop">http://msdn.microsoft.com/workshop</a>

它還適用于指向在 Web 站點(diǎn)主頁(yè)的 URL:請(qǐng)使用下面的: <a href="http://msdn.microsoft.com/">,不要用 <a href="http://msdn.microsoft.com">.


技巧 24:避免使用服務(wù)器變量

訪問(wèn)服務(wù)器變量將引起 Web 站點(diǎn)向服務(wù)器提出特殊的請(qǐng)求,然后收集所有的服務(wù)器變量,并不止是需要的那個(gè)。這好像從發(fā)霉的閣樓中的文件夾中檢索某條特殊的信息一樣。當(dāng)想要某條信息時(shí),在訪問(wèn)該信息之前必須先上閣樓取得文件夾。這與請(qǐng)求服務(wù)器變量時(shí),性能訪問(wèn)出現(xiàn)第一次請(qǐng)求服務(wù)器變量所發(fā)生的一樣。后續(xù)的對(duì)其他服務(wù)器變量的訪問(wèn)不會(huì)引起性能訪問(wèn)。

從不訪問(wèn)不合格的 Request 對(duì)象(例如,Request("Data"))。對(duì)于不在 Request.Cookies、Request.Form、Request.QueryString 或 Request.ClientCertificate 中的項(xiàng),有對(duì) Request.ServerVariables 的隱含調(diào)用。Request.ServerVariables 集合比其他集合慢很多。

技巧 25:升級(jí)為最新的和最好的版本

系統(tǒng)組件常常升級(jí),建議升級(jí)為最新的和最好的版本。最好升級(jí)到 Windows 2000(還有,IIS 5.0、ADO 2.5、MSXML 2.5、Internet Explorer 5.0、VBScript 5.1 和 JScript 5.1)。IIS 5.0 和 ADO 2.5 在多處理器計(jì)算機(jī)上實(shí)現(xiàn)了非常好的性能。在 Windows 2000 下,ASP 能良好地?cái)U(kuò)展到四個(gè)處理器或者更多,但是在 IIS 4.0,ASP 不能擴(kuò)展為超過(guò)兩個(gè)處理器。在應(yīng)用程序中使用的腳本和 ADO 越多,升級(jí)到 Windows 2000 后獲得的性能提高就越大。

如果您還無(wú)法升級(jí)到 Windows 2000 ,可以升級(jí)為最新版本的 SQL Server、ADO、VBScript 和 JScript、MSXML、Internet Explorer 和 NT 4 Service Packs。它們都改進(jìn)了性能并增強(qiáng)了可靠性。

技巧 26:調(diào)整 Web 服務(wù)器

有許多 IIS 調(diào)節(jié)參數(shù)可以改進(jìn)站點(diǎn)性能。例如,使用 IIS 4.0,我們經(jīng)常發(fā)現(xiàn)增加 ASP 的 ProcessorThreadMax 參數(shù)(請(qǐng)參閱 IIS 文檔)能獲得很大的好處,尤其是在經(jīng)常等待后端資源,例如數(shù)據(jù)庫(kù)或其他中間層產(chǎn)品,例如 screen-scrapers,的站點(diǎn)上。在 IIS 5.0 中也許會(huì)發(fā)現(xiàn),打開(kāi) ASP Thread Gating 比試圖為 AspProcessorThreadMax 找一個(gè)最佳的設(shè)置更為有效。

下面的調(diào)整 IIS(英文),是一篇很好的資料。

最佳的配置取決于(在其他因素中)應(yīng)用程序代碼、在其上運(yùn)行的硬件以及客戶端的工作負(fù)荷。發(fā)現(xiàn)最佳設(shè)置的唯一方法是運(yùn)行性能測(cè)試,它將我們帶入下一個(gè)技巧。

技巧 27:進(jìn)行性能測(cè)試

如上所述,性能是一種指標(biāo)。如果您正努力改進(jìn)站點(diǎn)的性能,請(qǐng)先設(shè)置性能目標(biāo),然后提高性能直到達(dá)到目標(biāo)為止。請(qǐng)不要將所有的性能測(cè)試放在項(xiàng)目的最后。往往到了項(xiàng)目的最后,再做非做不可的體系結(jié)構(gòu)改動(dòng)已為時(shí)太晚,并使客戶失望。性能測(cè)試是日常測(cè)試的一部分。性能測(cè)試可以針對(duì)獨(dú)立組件進(jìn)行,例如 ASP 頁(yè)面或 COM 對(duì)象,也可以將站點(diǎn)作為一個(gè)整體進(jìn)行。

許多人使用單一的瀏覽器請(qǐng)求頁(yè)面來(lái)測(cè)試他們 Web 站點(diǎn)的性能。這將使您對(duì)站點(diǎn)的響應(yīng)有很好的感覺(jué),但對(duì)于站點(diǎn)在有負(fù)荷下的性能卻一無(wú)所知。

通常,要準(zhǔn)確地測(cè)量性能,需要專用的測(cè)試環(huán)境。這個(gè)環(huán)境應(yīng)該由那些,在處理器速度、處理器個(gè)數(shù)、內(nèi)存、硬盤、網(wǎng)絡(luò)配置等方面,能模擬產(chǎn)品硬件的硬件組成。然后,需要定義客戶端的工作負(fù)荷:有多少并發(fā)用戶;他們提出請(qǐng)求的頻率;他們將訪問(wèn)的頁(yè)面類型等等。如果您無(wú)法從站點(diǎn)獲得實(shí)際的使用數(shù)據(jù),則需要估計(jì)它們。最后,需要一個(gè)能模擬預(yù)期客戶端工作負(fù)荷的工具。在這些工具的幫助下,可以開(kāi)始回答一些問(wèn)題,例如,如果我有 N 個(gè)并發(fā)用戶,需要多少臺(tái)服務(wù)器?您還能找出瓶頸和優(yōu)化的目標(biāo)。

下面列出了一些好的 Web 強(qiáng)度測(cè)試工具。極力推薦“Microsoft Web 應(yīng)用程序強(qiáng)度測(cè)試 (WAS)”工具包。WAS 允許記錄測(cè)試腳本,然后模擬成百或上千個(gè)訪問(wèn) Web 服務(wù)器的用戶。WAS 報(bào)告大量統(tǒng)計(jì)結(jié)果,包括每秒請(qǐng)求數(shù)、響應(yīng)時(shí)間的分布和錯(cuò)誤計(jì)數(shù)。WAS 具有增強(qiáng)客戶端和基于 Web 的接口;Web 接口允許進(jìn)行遠(yuǎn)程測(cè)試。

請(qǐng)務(wù)必閱讀 IIS 5.0 調(diào)試指南(英文)。