导语:
人生老是面临着许多抉择许多困惑!做为一名“攻城师”或“程序猿”的咱们,工做的时候更是如此。你曾经是否苦恼过在系统中使用哪一种文件编写客户端请求最合适或最高效呢?aspx、ashx、asmx到底该如何选择呢?若是有过而且没有时间静下来好好思考过这些问题(咱们老是这样),那么请进来我这坐坐,一块儿品味一下,放松心情!
aspx文件也就是普通的页面文件,ashx就是通常处理程序,他没有页面部分,asmx文件也就是轻量级的WebService。假如咱们须要一个处理某个请求而后返回一个结果的程序,那么你会选择什么样的文件来编码呢?总的来讲,这三种文件各有各的好处,我如今就从客户端发起一个get请求,服务端返回一个“Hello World”字符串做为本次请求的结果,这三种文件处理效率上作个比较分析。
咱们实验的准备环境是,IIS7.5,三种文件只是简单的返回一个“Hello World”字符串,不要多写别的代码,aspx文件就采用直接写在页面上,也不要指定什么后台处理类了,同时也去掉多余的HTML代码。如图:
经过apache轻量级的测试工具ab,模拟10个并发用户共请求1000次分别得出出结果如图:
一、aspx
二、ashx
三、asmx
经过观察三者中的Requests per second(服务器每秒处理请求数)以及Time per request<mean,across all concurrent requests>(服务端平均处理每一个请求耗时)能够得知以下结论:
aspx与ashx处理效率差很少,但ashx还是首选。asmx处理效率很是低下只有前者的1/3,故在高性能环境下慎用。
道理
一、为啥ashx是首选?
ashx比较轻量级,没有aspx实现的复杂,他只是一个简单服务端处理请求程序,而aspx框架须要处理更多的额外的东西,加上aspx属于动态编译,首次访问速度会很是慢,本次试验已经去掉了这个阶段,另外经过上面分析数据可知,即便我去掉了多余的内容,其实际传输内容也比ashx多,关于aspx页面默认Session加锁,致使同一个用户一次只能处理一个任务的问题,我也测试过关闭Session的状况下,获得的结果是同样的,这个缘由是由于本次测试处理时间很短,因此能够忽略不计对Session加锁带来的延时问题。实际状况下,不须要Session就关闭之,能够提升单个用户的并发量。但二者处理效率整体来讲很是接近,你们能够根据本身的须要抉择。
二、为啥asmx效率介么低?
这是一个SOA范畴的程序,遵照一些SOA的标准协议,服务端收到请求后返回的结果不能直接返回,还须要使用标准的SOAP协议组织好数据,相似一个XML文档结构的返回流,从分析结果图中也能够看出来,他返回的数据量比前者高出一位数,总之基于序列化和多余的XML文档数据等使得他处理请求的能力远不如前者。