NET网页编程之ASP.NET和PHP功能之战续:更公允的测试场景
你觉得学习.NET怎么样,我懂的少,问的可能很幼稚,见笑了啊:)<p>有关ASP.NET和PHP的实行速率,一样平常第一印象会以为PHP对照快。上个月有一篇JoeStagner的博文对ASP.NET和PHP的实行速率举行了又一番对照,了局是ASP.NET功能较优(这在JustinJames的博文上也提到过,51CTO因而也曾存眷过)。不外这还没完:如许的话题必定会引来良多会商,而Joe也举行了第二轮测试。因而克日,InfoQ的赵劼又对两边的论争举行了总结以下:上个月JoeStagner在博客上宣布了一系列文章对照了PHP和ASP.NET的实行功能,引发了来自两边程序员的大批回应。Joe暗示,他会将如许的测试延续下往,并追求更加符合的体例,以取得对实践项目来讲尽量有参考代价的结论。
Joe暗示:
一样平常来讲,作功能测试的目标是要实验证实一方比令一方要快。我受雇于微软,同时编写PHP和ASP.NET代码。我在.NET呈现之前就在利用PHP,两个器材我都很喜好。
以是,我很难说出哪一个更好。当我说PHP坏话时,我的微软同事们会写信来品评我,而当我宣布偏向于ASP.NET的行动时,我的PHP伴侣们会说我是微软的托。
我举行这个测试是由于每一个人都对PHP的功能有本人的意见(Windowsvs.Linux&5.2vs.5.3),却没人能给出明白的数据。
依据Joe的形貌,测试情况以下:
<OL>一切的测试都在统一台呆板上运转(具有4G内存和60G7200转硬盘的ToshibaTecraM5)。Ubuntu9和WindowsServer2008尺度版分离安装于自力(但不异)的硬盘中。Linux利用Apache2,Windows利用IIS7作为各自的Web服务器。两边的操纵体系都举行了完全的patch或晋级。两边的体系和运转时都没有举行分外的功能加强。从实行了局上看,PHP在Linux和Windows的实行功能半斤八两:
<OL>地道的语句实行在Windows上体现更好。函数挪用在Windows上更快。工具的创立和会见,关于PHP5.2来讲在Linux上更快,可是关于PHP5.3来讲则是Windows更快。类库挪用在Linux上快很多(如在Ubuntu长进行加密要比Windows要快3到5倍)。在Linux上会见文件功能略高于Windows,不外Windows上文件复制的功能要比Linux慢60%,多是ACL初级平安的原因。在Linux上会见MySQL要比Windows快很多,并且在Windows上运转PHP5.3的情形则更加卑劣(不外从上面PostgreSQL的情形下去看,这应当是糟完成的原因)。PostgreSQL在两个平台上的功能十分靠近(1000个操纵的差异在0.06秒以内)——不管是PHP5.3仍是PHP5.2,Windows上体现都略胜一筹。Windows上PHP5.2会见MSSQLServer的功能稍逊于在Linux上会见MySQL(此时还没有面向PHP5.3的SQLServer撑持)。Joe以为,这暗示:
<OL>我们能够这么以为,关于地道的PHP实行功能来讲,Linux和Windows相差无几,这不会成为选择Linux或Windows作为部署平台的决意性要素。假如你在构建一个使用程序,那末PostgreSQL多是更好的选择。由于它在两个平台上的体现都很优异。假如你的使用程序必需利用MySQL,那末选择Windows就必要早些企图扩大性成绩了(团体以为Sun不太大概为Windows优化MySQL的功能)。PHP的第一个版本的SQLServer驱动程序要比MySQL或PostpreSQL要慢一些,但这应当不会成为成绩。第二个版本的驱动器正在开辟当中,它会带来功能提拔。在Joe看来,周全来看,PHP和IIS团队在实行功能上已做的十分乐成,接上去就必要各开源程序的团队(Drupal、WordPress、Joomla等等)为各平台举行功能优化了。
不外,除文件复制操纵以外,ASP.NET在功能方面周全抢先于PHP(不管部署在Linux仍是Windows下面):
<OL>Linux上会见MySQL的功能稍稍优于Windows上会见SQLServer的功能(利用一般的数据范例和SELECT语句)。可是这里的差异几近能够疏忽不计。ASP.NET(C#)操纵,如工具利用,类库挪用等等,其功能都远高于PHP。关于这个测试了局,Joe增补道:
我晓得我的一些PHP伴侣和Linux伴计们要跳出来批驳我的测试和了局了。:)
我一向在思索,如许的功能对照是不是必要到场一些初级的优化选项。不外.NET方面也有比方多线程,异步哀求,和各类缓存体例可使用
请注重——我并没有说“ASP.NET更快,以是你不该该利用PHP!”,我利用以为,PHP过于复杂招致对某些初级使用来讲有些寸步难行,就像ASP.NET在项目初期会有进修方面的庞大性。
对我来讲,PHP最使人镇静的中央不是它的言语/平台,而是不计其数伶俐的PHP开辟职员,和各类优异的项目(如Drupal、Joomla、WordPress、PHPBB、Nuke等等)。
能够这么以为,PHP在Windows和Linux上的功能处于统一个程度上,我如今终究能够为Windows编写那些我企望着很多年的PHP类库了。
Joe还公然了测试代码。他暗示,假如你对这个测试的了局有疑义,能够亲身举行这个实行,或是编写你本人的测试代码举行实验。
文章公布以后,很多网友对这一测试了局宣布了意见。Joe基础上一一复兴了个中的次要概念:
“我利用ASP.NET只是由于我喜好VisualStudioIDE”——我团体以为VisualStudio是最有临盆力的开辟工具。可是,PHP的有不错的选择。我利用ZendStudio,PHPEd,Komodo,DelphiforPHP,这些都很不错。我厌恶Eclipse,不外Zend也在这方面为PHP开辟做了很多扩大。
应当对照ASP的功能——不必了,感谢。新式的ASP与今朝的PHP与ASP.NET差异太年夜了。做这类对照,仿佛是在倡议利用ASP开辟新项目,我激烈不倡议你这么做。
32位与64位体系之间的对照——这些测试的目标并非为了表现64位体系上的功能差异。从此的测试我会增添64位的场景。
“PHP丑恶至极”——哦,我分歧意。新式ASP要丑恶多了。你能够写出十分可骇而丑恶的PHP代码,也能够写出丑恶而可骇的C#或VB代码。一样,你也能够写出文雅的C++款式的PHP。这完整只和开辟职员的妙技有关。
应当利用Windows上的Apache举行测试——Apache是Linux上的服务器,不外我以为假如你在Windows上不利用IIS7则会丧失太多太多器材了。
“有举措在Win2K8中,在不丧失平安性的条件下加速文件复制功能吗?”——仿佛不可。我以为这触及到Windows服务器上的ACL体系。我今后大概会测试经由过程数据流读取文件的功能,有些器材的功能大概会有所改良。不外,Web使用程序一样平常不会编程来复制大批文件。
“PHP一向是,也永久只是一个半专业性子的情况”——这类说法狗屁欠亨。PHP平台上有很多专业的,高质量的使用程序,也有良多我十分尊崇的开辟职员。是不是专业是开辟职员的成绩,不是PHP或ASP.NET的成绩。
“我以为对照没有opcode缓存的PHP很不公允,.NET是编译实行的,而PHP必要每次都注释并‘编译’页面”——我批准这个测试大概不敷完全,可是我不认同这个逻辑。我测试PHP的体例,就和下载安装的体例一样。我的假造主机也没有安装op-code缓存。而现实上,ASP.NET自带这个特征也其实不意味着测试是不公允的,这是由于PHP短少这个特征——不外这个请求很公道,我正在筹办新的测试。
“说PHP不是一个‘专业的’言语很没事理,由于几近一切最年夜的站点都是用PHP构建的”——这类说法是没事理,不外说那些站点“几近都是”用PHP构建的也是毛病的。有些是,有些不是。
Joe增补道:
假如你们看到这一数据以后对ASP.NET信念倍增我天然很乐意。假如我不以为.NET是开辟Web使用程序来讲是一种更好的选择——最少不属于别的平台,那末我也不会在微软事情了。
可是……假如你由于这些数据而无视PHP,也是毛病且稚嫩的举动。
从纯手艺角度来讲,我以为.NET远比PHP壮大,但这其实不意味着PHP不敷壮大。在我看来,PHP的力气表现在浩瀚的使用程序和可用的框架。
约莫一周今后,Joe公然了第二次测试的了局。与前一个测试比拟,第二个测试次要有以下两个改动:
<OL>为Linux和Windows上安装了op-code缓存,偏重新运转了年夜部分测试。因为一些依附项的成绩,PHP5.3+APC的测试平台酿成了Debain5操纵体系。关于第二次测试及其了局,Joe注释到:
从了局上看,Ubuntu和Debian上运转PHP的功能差异能够疏忽不计。部分条目标功能有些微小的改善,有些则有25%的进步,可是整体来讲其效果比我设想中要来得低。
利用APC以后,一些条目标运转反而变慢了,不外我以为这只是呆板所酿成的偏差。请注重,表格中显现的不是第一次的了局,都是经由两次革新,确认是在缓存射中时失掉的了局。
我以为如今的测试十分公允。
空的轮回测试和空的函数实行十分主要,由于这反应了言语或平台的基本损耗。这是处页面传输等功能开支外的功能损耗,是一个主要的思索方面。
我的一些PHP伴侣也承认这个测试的正确性,不外给出了十分有看法的增补:
<OL>ASP.NET在功能上的抢先不会对我有甚么影响。PHP是我的最爱,我的使用程序已充足我认为,可以通过更加简单的首次编译,而增加第二次编译的负担,来提高java的运行效率。只是将java源代码进行简单的等价转换,而不假设编译成某种虚拟机器的目标格式,而由本地编译器针对性的二次编译。 Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。 市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。 Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。 ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。 使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
页:
[1]