慎用url重寫

爲了使url地址更加友好(當然可能有別的原因),很多站點使用了url重寫,如http://www.cnblogs.com/life,在Asp.Net中通常要處理這樣的url重寫,必須在IIS中將*.*映射到ASPnet_isapi.dll(C:\WINDOWS\Microsoft.NET\Framework\v1.1.432\aspnet_isapi.dll),然後在web.config進行相應的配置,最後在寫相應的處理程序,多數情況我們是那麽做的,搏客園也是那麽做的,這似乎沒有什麽問題。

但是搏客園很久以來一直存在性能問題,dudu和園子的很多朋友也想了很多法子去提高性能,取得了不小的成績,但是還是不是很理想,我也很想出一份力,因爲我很喜歡搏客園,我在園子學了很多東西,基本上是早中晚都要看上面的文章,直到昨天晚上一個技術群的朋友問我一個url重寫的問題之後,忽然醒悟搏客園的性能問題很可能是url重寫造成的。

我朋友的問題是這樣:

http://www.wodecity.com/food和http://www.wodecity.com/food.html(該鏈接現在已經失效)都是通過url重寫定位到同一個頁面http://www.wodecity.com/page/food.aspx ,都是用同樣的處理程序,唯一不同的是爲了處理http://www.wodecity.com/food這樣沒有擴展名的地址他必須將*.*映射到aspnet_isapi.dll,而http://www.wodecity.com/food.html則是將*.Html映射到aspnet_isapi.dll,結果發現http://www.wodecity.com/food.html的性能比http://www.wodecity.com/food好十至二十倍,他是用loadrunner進行測試的,他對這樣的結果感到很郁悶。我開始的時候也感到不可思議,*.*和*.html到底什麽區別呢,*.*就是該頁面所有的請求,包括Css文件和所有的圖片文件都有用他寫的url重寫處理程序去處理,*.html則沒有,只是一個請求,問題就出現在這裏了,http://www.wodecity.com/food這個頁面有超過20個圖片吧,請求一個頁面要同時用url重寫處理程序去處理那麽多圖片,能不慢嗎?怎麽辦呢?因爲他們想用http://www.wodecity.com/food這樣的url,這樣比較友好,所以還是要用*.*,思考一會兒之後我告訴他,讓你的url重寫程序不處理那些圖片文件就行了,怎麽做呢?有兩個方法:方法1,把存放圖片所在的文件夾轉化成一個虛擬目錄,在然後移處該虛擬目錄*.*的映射,這樣一來他的url重寫程序就不會去處理圖片文件,當然存放別的不需要url重寫程序的文件也要象圖片文件夾做類似的處理,方法2,新建一個站點,如用http://img.wodecity.com/存放圖片文件,原理是一樣的,都是讓你的url重寫處理程序不處理那些圖片文件。

一切ok,他跟我說今天早上他到公司測試一下。

爲了驗證我的想法,我今天自己也寫了一個程序去測試,性能也是相差近20倍,good,我的想法是正確。

或許我的想法或測試結果有錯誤,這裏歡迎PK。MSN:cxbsky#hotmail.com。

也希望這篇文章對搏客園的性能問題有所幫助,因爲搏客園出現的問題可能和我朋友的站點很相似。

ps:寫完這篇文章的時候我問了一下我那朋友的測試結果,他說:“原來只能撐到50個人。現以700以上都沒有問題 。”

http://www.cnblogs.com/csky/archive/2006/08/09/urlrewrite.html

慎用url重寫
爲了使url地址更加友好(當然可能有別的原因),很多站點使用了url重寫,如http://www.cnblogs.com/life,在asp.net中通常要處理這樣的url重寫,必須在IIS中將*.*映射到aspnet_isapi.dll(C:\WINDOWS\Microsoft.NET\...查看完整版>>慎用url重寫
 
IIS7 的新功能 - URL重寫、應用程序路由和負載均衡以及PowerShell Cmd-lets
在過去幾周裏,IIS團隊發布了3個IIS擴展更新l URL Rewrite Module CTP1l Application Request Routing CTP1l PowerShell Provider CTP2URL Rewrite Module URL Rewrite Module是一個基于規則的URL重寫引擎,用于在...查看完整版>>IIS7 的新功能 - URL重寫、應用程序路由和負載均衡以及PowerShell Cmd-lets
 
在ASP.NET中執行URL重寫
  引言  讓我們花點時間來看一下網站上的一些 URL。您是否發現一些類似于 http://yoursite.com/info/dispEmployeeInfo.aspx?EmpID=459-099&type=summary 的 URL?或者,您可能將一系列網頁從一個目錄或網站移動到...查看完整版>>在ASP.NET中執行URL重寫
 
網站SEO之織夢URL重寫的一點心得
  最近一些在做自己網站的SEO優化這塊內容,因爲我的站跟admin5一樣,是用織夢CMS搭建的,所以很多優化細節參考了站長網,也從站長論壇的交流中學到了不少東西,下面把一的心得寫下來,留給有用的朋友。  用過織...查看完整版>>網站SEO之織夢URL重寫的一點心得
 
Url重寫之action改變的問題
namespace ActionlessForm {public class Form : System.Web.UI.HtmlControls.HtmlForm{protected override void RenderAttributes(HtmlTextWriter writer){writer.WriteAttribute('name', this.Name);base.Attribut...查看完整版>>Url重寫之action改變的問題
 
URL重寫實現IHttpHandler接口
以前用url重寫時是用的ms urlrewriter,用了以後發現了很多不足,自定義功能太弱,而且隨著重寫規則的增加,web.config可能會越來越大,實際上,url重寫就是實現IHttpHandler接口.整個流程分二步走:1、用一個xml文件來存儲...查看完整版>>URL重寫實現IHttpHandler接口
 
asp.net 2.0中的URL重寫以及urlMappings問題
在asp.net2.0中的urlMappings倒是非常好用,可惜暫不支持正則表達式,不過,好在如果用IHttpModule的話不管什麽樣的請求都會先經過IHttpModule這樣就爲URL重寫提供了一個好機會:下面是我寫的一個IHttpModule:using ...查看完整版>>asp.net 2.0中的URL重寫以及urlMappings問題
 
收集ISAPI_Rewrite的中文資料,URL重寫,URL靜態化,URL簡化
ISAPI_Rewrite是一個強大的基于正則表達式的URL處理引擎。它非常類似于Apache's mod_Rewrite,但它是專爲IIS設計的。 ISAPI_Rewrite有兩個版本:ISAPI_Rewrite Full與ISAPI_Rewrite Lite。 ISAPI_Rewrite Lite是免費...查看完整版>>收集ISAPI_Rewrite的中文資料,URL重寫,URL靜態化,URL簡化
 
IIS URL重寫模塊和ASP.NET路由組件比較
隨著針對IIS 7.0的URL重寫模塊的發布,以及在.NET框架3.5 SP1中包含了ASP.NET路由(Routing),許多ASP.NET開發人員開始質問這兩種特性彼此間的關系,以及應該何時使用。Ruslan Yakushev在LearnIIS.NET上發表了一篇很...查看完整版>>IIS URL重寫模塊和ASP.NET路由組件比較
 
 
回到王朝網路移動版首頁