導語:
人生總是面臨着許多抉擇許多困惑!作為一名“攻城師”或“程序猿”的我們,工作的時候更是如此。你曾經是否苦惱過在系統中使用哪種文件編寫客戶端請求最合適或最高效呢?aspx、ashx、asmx到底該如何選擇呢?如果有過並且沒有時間靜下來好好思考過這些問題(我們總是這樣),那么請進來我這坐坐,一起品味一下,放松心情!
aspx文件也就是普通的頁面文件,ashx就是一般處理程序,他沒有頁面部分,asmx文件也就是輕量級的WebService。假如我們需要一個處理某個請求然后返回一個結果的程序,那么你會選擇什么樣的文件來編碼呢?總的來說,這三種文件各有各的好處,我現在就從客戶端發起一個get請求,服務端返回一個“Hello World”字符串作為本次請求的結果,這三種文件處理效率上做個比較分析。
我們實驗的准備環境是,IIS7.5,三種文件只是簡單的返回一個“Hello World”字符串,不要多寫別的代碼,aspx文件就采用直接寫在頁面上,也不要指定什么后台處理類了,同時也去掉多余的HTML代碼。如圖:
通過apache輕量級的測試工具ab,模擬10個並發用戶共請求1000次分別得出出結果如圖:
1、aspx
2、ashx
3、asmx
通過觀察三者中的Requests per second(服務器每秒處理請求數)以及Time per request<mean,across all concurrent requests>(服務端平均處理每個請求耗時)可以得知如下結論:
aspx與ashx處理效率差不多,但ashx仍是首選。asmx處理效率非常低下只有前者的1/3,故在高性能環境下慎用。
道理
1、為啥ashx是首選?
ashx比較輕量級,沒有aspx實現的復雜,他只是一個簡單服務端處理請求程序,而aspx框架需要處理更多的額外的東西,加上aspx屬於動態編譯,首次訪問速度會非常慢,本次試驗已經去掉了這個階段,另外通過上面分析數據可知,即使我去掉了多余的內容,其實際傳輸內容也比ashx多,關於aspx頁面默認Session加鎖,導致同一個用戶一次只能處理一個任務的問題,我也測試過關閉Session的情況下,得到的結果是一樣的,這個原因是因為本次測試處理時間很短,所以可以忽略不計對Session加鎖帶來的延時問題。實際情況下,不需要Session就關閉之,可以提高單個用戶的並發量。但兩者處理效率總體來說非常接近,大家可以根據自己的需要抉擇。
2、為啥asmx效率介么低?
這是一個SOA范疇的程序,遵守一些SOA的標准協議,服務端收到請求后返回的結果不能直接返回,還需要使用標准的SOAP協議組織好數據,類似一個XML文檔結構的返回流,從分析結果圖中也可以看出來,他返回的數據量比前者高出一位數,總之基於序列化和多余的XML文檔數據等使得他處理請求的能力遠不如前者。
