為了讓url位址更友善(當然可能有別的原因),許多網站使用了url重寫,如http://www.cnblogs.com/life ,在asp.net中通常要處理這樣的url重寫,必須在IIS中將*.*對應到aspnet_isapi.dll(C:WINDOWSMicrosoft.NETFrameworkv1.1.432aspnet_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