谁是速度之王?
刚刚在9月编程语言排行榜上取得历史性突破的PHP在Web开发领域最到的对手可能就是基于微软.NET技术的ASP.NET。近日,微软的 Joe Stagner在博客上发表了一系列文章比较了PHP和ASP.NET性能方面的文章,引起了来自双方程序员的大量回应。Joe表示,他会将这样的测试持 续下去,并寻求更为合适的方式,以获得对实际项目来说尽可能有参考价值的结论。
Joe在博客中称,一般来说,作性能测试的目的是要尝试证明一方比令一方要快。我受雇于微软,同时编写PHP和ASP.NET代码。我在.NET出现之前就在使用PHP,两个东西我都很喜欢。
所以,我很难说出哪个更好。当我说PHP好话时,我的微软同事们会写信来批评我,而当我发表倾向于ASP.NET的言论时,我的PHP朋友们会说我是微软的托。
我进行这个测试是因为每个人都对PHP的性能有自己的看法(Windows vs. Linux & 5.2 vs. 5.3),却没人能给出明确的数据。
ASP.NET比拼PHP的测试环境如下:
所有的测试都在同一台机器上运行(拥有4G内存和60G 7200转硬盘的Toshiba Tecra M5)。
Ubuntu 9和Windows Server 2008标准版分别安装于独立(但相同)的硬盘中。
Linux使用Apache2,Windows使用IIS 7作为各自的Web服务器。
双方的操作系统都进行了完整的patch或升级。
双方的系统和运行时都没有进行额外的性能增强。
从实验结果上看,PHP在Linux和Windows的执行性能各有千秋:
纯粹的语句执行在Windows上表现更好。
函数调用在Windows上更快。
对象的创建和访问,对于PHP 5.2来说在Linux上更快,但是对于PHP 5.3来说则是Windows更快。
类库调用在Linux上快得多(如在Ubuntu上进行加密要比Windows要快3到5倍)。
Linux与Windows平台对比
在Linux上访问文件性能略高于Windows,不过Windows上文件复制的性能要比Linux慢60%,可能是ACL高级安全的缘故。
在Linux上访问MySQL要比Windows快不少,而且在Windows上运行PHP 5.3的情况则更为恶劣(不过从下面PostgreSQL的情况上来看,这应该是糟糕实现的缘故)。
PostgreSQL在两个平台上的性能非常接近(1000个操作的差距在0.06秒之内)——无论是PHP 5.3还是PHP 5.2,Windows上表现都略胜一筹。
Windows上PHP 5.2访问MS SQL Server的性能稍逊于在Linux上访问MySQL(此时还没有面向PHP 5.3的SQL Server支持)。
对于纯粹的PHP执行性能来说,Linux和Windows相差无几,这不会成为选择Linux或Windows作为部署平台的决定性因素。如果你在构建一个应用程序,那么PostgreSQL可能是更好的选择。因为它在两个平台上的表现都很优秀。
如果你的应用程序必须使用MySQL,那么选择Windows就需要早些计划扩展性问题了(个人认为Sun不太可能为Windows优化MySQL的性能)。
PHP的第一个版本的SQL Server驱动程序要比MySQL或PostpreSQL要慢一些,但这应该不会成为问题。第二个版本的驱动器正在开发之中,它会带来性能提升。
在Joe看来,全面来看,PHP和IIS团队在执行性能上已经做的非常成功,接下来就需要各开源程序的团队(Drupal、WordPress、Joomla等等)为各平台进行性能优化了。
不过,除了文件复制操作之外,ASP.NET在性能方面全面领先于PHP(无论部署在Linux还是Windows上面):
Linux上访问MySQL的性能稍稍优于Windows上访问SQL Server的性能(使用普通的数据类型和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只是因为我喜欢Visual Studio IDE”——我个人认为Visual Studio是最有生产力的开发工具。但是,PHP的有不错的选择。我使用Zend Studio,PHPEd,Komodo,Delphi for PHP,这些都很不错。我讨厌Eclipse,不过Zend也在这方面为PHP开发做了不少扩展。
应该比较ASP的性能——不用了,谢谢。旧式的ASP与目前的PHP与ASP.NET差距太大了。做这种比较,似乎是在建议使用ASP开发新项目,我强烈不建议你这么做。
32位与64位系统对比
32位与64位系统之间的比较——这些测试的目的并不是为了体现64位系统上的性能差距。今后的测试我会增加64位的场景。
“PHP丑陋至极”——哦,我不同意。旧式ASP要丑陋多了。你可以写出非常可怕而丑陋的PHP代码,也可以写出丑陋而可怕的C#或VB代码。同样,你也可以写出优雅的C++样式的PHP。这完全只和开发人员的技能有关。
应该使用Windows上的Apache进行测试——Apache是Linux上的服务器,不过我认为如果你在Windows上不使用IIS 7则会损失太多太多东西了。
“有办法在Win2K8中,在不损失安全性的前提下加快文件复制性能吗?”——似乎不行。我认为这涉及到Windows服务器上的ACL系统。 我以后可能会测试通过数据流读取文件的性能,有些东西的性能可能会有所改善。不过,Web应用程序一般不会编程来复制大量文件。
“PHP一直是,也永远只是一个半专业性质的环境”——这种说法狗屁不通。PHP平台上有许多专业的,高质量的应用程序,也有很多我非常尊敬的开发人员。是否专业是开发人员的问题,不是PHP或ASP.NET的问题。
“我认为比较没有opcode缓存的PHP很不公平,.NET是编译执行的,而PHP需要每次都解释并‘编译’页面”——我同意这个测试可能不 够完整,但是我不认同这个逻辑。我测试PHP的方式,就和下载安装的方式一样。我的虚拟主机也没有安装op-code缓存。而事实上,ASP.NET自带 这个特性也并不意味着测试是不公平的,这是因为PHP缺少这个特性——不过这个要求很合理,我正在准备新的测试。
“说PHP不是一个‘专业的’语言很没道理,因为几乎所有最大的站点都是用PHP构建的”——这种说法是没道理,不过说那些站点“几乎都是”用PHP构建的也是错误的。有些是,有些不是。
如果你们看到这一数据之后对ASP.NET信心倍增我自然很高兴。如果我不认为.NET是开发Web应用程序来说是一种更好的选择——至少不属于其它平台,那么我也不会在微软工作了。
但是……如果你因为这些数据而忽视PHP,也是错误且幼稚的行为。
从纯技术角度来说,我认为.NET远比PHP强大,但这并不意味着PHP不够强大。在我看来,PHP的力量体现在众多的应用程序以及可用的框架。
大约一周以后,Joe公开了第二次测试的结果。与前一个测试相比,第二个测试主要有以下两个改变:
为Linux和Windows上安装了op-code缓存,并重新运行了大部分测试。
由于一些依赖项的问题,PHP 5.3 + APC的测试平台变成了Debain 5操作系统。
对于第二次测试及其结果,Joe解释到:
从结果上看,Ubuntu和Debian上运行PHP的性能差距可以忽略不计。部分条目的性能有些细小的改进,有些则有25%的提高,但是总体来说其效果比我想象中要来得低。
使用APC之后,一些条目的运行反而变慢了,不过我认为这只是机器所造成的误差。请注意,表格中显示的不是第一次的结果,都是经过两次刷新,确认是在缓存命中时得到的结果。
我认为现在的测试非常公平。
空的循环测试和空的函数执行非常重要,因为这反映了语言或平台的基础消耗。这是处页面传输等性能开销外的性能消耗,是一个重要的考虑方面。
我的一些PHP朋友也认可这个测试的准确性,不过给出了非常有见解的补充:
ASP.NET在性能上的领先不会对我有什么影响。PHP是我的最爱,我的应用程序已经足够快了。没错,ASP.NET在基础性能上是比较快,但是我的应用程序可以通过优秀的页面实现和JavaScript实践把这部分性能补回来。
此外,根据上一次实验的结果,在Windows平台上运行PHP时,在MySQL和文件的访问上有一些性能问题,微软许多团队都向我获取了相关信息。希望这些数据都够转变为切实的改进。
Joe表示,他将收集大家认为更公平,更有意义的测试场景。以下是他所计划的测试项目:
实际页面测试:循环,函数调用和对象操作是一类测试,不过页面的整体呈现则是另一种有意义的测试。
负载测试:哪一个环境可以同时处理更大量的请求。
在负载测试中,哪一方的性能会下降地更快。
在各种情况下,64位平台的表现如何。
国内也曾经进行过PHP在Linux和Windows平台上的性能测试。微软在WordCamp China 2009大会上公开了之前与康盛创想合作进行的性能评估结果:在Windows Server 2008 + IIS上运行PHP,从平均相应时间,每秒处理的请求数,以及数据吞吐量等多方便均优于Linux + Apache的托管方式。
asp.net和php哪个更好
asp.net是微软的东西,他的发展前途取决于微软的态度。
在.net之前,微软的是ASP。在微软的大力推广下,其看起来还是很有前途的。但现在,微软想推广asp.net,而ASP成了其障碍。所以 从Windows Server 2003开始,微软对ASP做了许多限制,比如上传文件不能超过200KB等。再看看现在,微软为了推广Windows Vista以及最新的Windows 7,对Windows XP做了些什么,直接对普通用户停止了技术支持,就是为了迫使你更换。
如果以后,微软有了比.net更好的东西。微软估计会对.net做类似的限制,强制用户升级。
PHP是完全开源的,其需求更贴近日常的应用,代码风格类似于C语言,比较容易学习。
速度方面,虽然PHP不是经过编译的,但在Linux下的实际应用的执行效率肯定要比Windows下的.net快。
运行时的安全性PHP肯定要比微软的.net要高。不过通常代码都是没有保护的。通常需要用商业的Zend软件来加密。当然这个加密的过程也是 种编译的过程。保护了代码的同时,还提高了执行速度。新的Zend的加密算法,目前还没有成功破解的。而.net如果只做单纯的编译,是很容易被反编译回 来的。
PHP目前有两个支线,一个PHP4、一个是PHP5。两个支线都在共同的维护中。这保证过去使用PHP4的系统仍然能保证持续的良好的安全性和功能的更新。
ASP.NET与PHP哪个更有发展前途一点?
简 介
ASP全名Active Server Pages,是一个WEB服务器端的开发环境,利用它可以产生和运行动态的、交互的、高性能的WEB服务应用程序。ASP采用脚本语言VBScript(Java script)作为自己的开发语言。
PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用C,Java和Perl语言的语法, 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态生成页面。它支持目前绝大多数数据库。还有一点,PHP是完全免费的,不用花钱,你可以从 PHP官方站点(http: //www.php.net)自由下载。而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。
JSP是Sun公司推出的新一代站点开发语言,他完全解决了目前ASP,PHP的一个通病——脚本级执行(据说PHP4也已经在Zend的支持 下,实现编译运行)。Sun公司借助自己在Java上的不凡造诣,将Java从Java应用程序和Java Applet之外,又有新的硕果,就是JSP——Java Server Page。Jsp可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。
三者都提供在 HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。但JSP代码被编译成 Servlet并由Java虚拟机解释执行,这种编译操作仅在对JSP页面的第一次请求时发生。在ASP 、PHP、JSP环境下,HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。普通的 HTML页面只依赖于Web服务器,而ASP 、PHP、JSP页面需要附加的语言引擎分析和执行程序代码。程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送给浏览器。ASP 、PHP、JSP三者都是面向Web服务器的技术,客户端浏览器不需要任何附加的软件支持。
技术特点
ASP:
使用VBScript 、 JScript等简单易懂的脚本语言,结合HTML代码,即可快速地完成网站的应用程序。
无须compile编译,容易编写,可在服务器端直接执行。
使用普通的文本编辑器,如Windows的记事本,即可进行编辑设计。
与浏览器无关(Browser Independence), 用户端只要使用可执行HTML码的浏览器,即可浏览Active Server Pages所设计的网页内容。Active ServerPages 所使用的脚本语言(VBScript 、 Jscript)均在WEB服务器端执行,用户端的浏览器不需要能够执行这些脚本语言。
Active Server Pages能与任何ActiveX scripting语言相容。除了可使用VB Script或JScript语言来设计外,还通过plug-in的方式,使用由第三方所提供的其他脚本语言,譬如REXX 、Perl 、Tcl等。脚本引擎是处理脚本程序的COM(Component Object Model) 物件。
可使用服务器端的脚本来产生客户端的脚本。
ActiveX Server Components(ActiveX 服务器元件 )具有无限可扩充性。
可以使用Visual Basic 、Java 、Visual C++ 、COBOL等编程语言来编写你所需要的ActiveX Server Component 。
PHP:
数据库连接
PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是现在绝佳的组合。你还可以自己编写外围的函数去间接存取数据库。通过这样 的途径当你更换使用的数据库时,可以轻松地更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。但PHP提供的数据库 接口支持彼此不统一,比如对Oracle, MySQL,Sybase的接口,彼此都不一样。这也是PHP的一个弱点。
面向对象编程
PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP支持构造器、提取类等。
JSP:
将内容的生成和显示进行分离
使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来生成页面上的动态内 容。生成内容的逻辑被封装在标识和JavaBeans组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和Beans中, 那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的生成。
在服务器端,JSP引擎解释JSP标识和小脚本,生成所请求的内容(例如,通过访问JavaBeans组件,使用JDBCTM技术访问数据库, 或者包含文件),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保证任何基于HTML的Web浏览器的完 全可用性。
强调可重用的组件
绝大多数JSP页面依赖于可重用的,跨平台的组件(JavaBeans或者Enterprise JavaBeans组件)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者客户团 体所使用。基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。
采用标识简化页面开发
Web页面开发人员不会都是熟悉脚本语言的编程人员。JavaServer Page技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化 JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码和耗时的功能。
通过开发定制化标识库,JSP技术是可以扩展的。今后,第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。
JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用Java技术家族的一部分,以及Java 2(企业版体系结构)的一个组成部分,JSP技术能够支持高度复杂的基于Web的应用。
由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为Java Servlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。
作为Java平台的一部分,JSP拥有Java编程语言“一次编写,各处运行”的特点。随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,更改工具或服务器并不影响当前的应用。
应用范围
ASP是Microsoft开发的动态网页语言,也继承了微软产品的一贯传统——只能运行于微软的服务器产品,IIS(Internet Information Server) (windows NT)和PWS(Personal Web Server)(windows 98)上。Unix下也有ChiliSoft的插件来支持ASP,但是ASP本身的功能有限,必须通过ASP+COM的组合来扩充,Unix下的COM实 现起来非常困难。
PHP3可在Windows,Unix,Linux的Web服务器上正常运行,还支持IIS,Apache等通用Web服务器,用户更换平台时,无需变换PHP3代码,可即拿即用。
JSP同PHP3类似,几乎可以运行于所有平台。如Win NT,Linux,Unix. NT下IIS通过一个插件,例如JRUN或者ServletExec,就能支持JSP。著名的Web服务器Apache已经能够支持JSP。由于 Apache广泛应用在NT、Unix和Linux上,因此JSP有更广泛的运行平台。虽然现在NT操作系统占了很大的市场份额,但是在服务器方面 Unix的优势仍然很大,而新崛起的Linux更是来势不小。从一个平台移植到另外一个平台,JSP和JavaBean甚至不用重新编译,因为Java字 节码都是标准的与平台无关的。
性能比较
有人做过试验,对这三种语言分别做循环性能测试及存取Oracle数据库测试。
在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的循环。而ASP、PHP测试的是2000*2000循环(少一个数量级),却分别用了63秒和84秒。(参考PHPLIB)。
数据库测试中,三者分别对 Oracle 8 进行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒,ASP则 需要 73 秒。 前景分析 目前在国内PHP与ASP应用最为广泛。而JSP由于是一种较新的技术,国内采用的较少。但在国外,JSP已经是比较流行的一种技术,尤其是电子商务类的 网站,多采用JSP。
采用PHP的网站如新浪网(sina)、中国人(Chinaren)等,但由于PHP本身存在的一些缺点,使得它不适合应用于大型电子商务站点,而更适合一些小型的商业站点。
首先,PHP缺乏规模支持。其次,缺乏多层结构支持。对于大负荷站点,解决方法只有一个:分布计算。数据库、应用逻辑层、表示逻辑层彼此分开, 而且同层也可以根据流量分开,组成二维阵列。而PHP则缺乏这种支持。还有上面提到过的一点,PHP提供的数据库接口支持不统一,这就使得它不适合运用在 电子商务中。
ASP和JSP则没有以上缺陷,ASP可以通过Microsoft Windowsd的COM/DCOM获得ActiveX规模支持,通过DCOM和Transcation Server获得结构支持;JSP可以通过SUN Java的Java Class和EJB获得规模支持,通过EJB/CORBA以及众多厂商的Application Server获得结构支持。
三者中,JSP应该是未来发展的趋势。世界上一些大的电子商务解决方案提供商都采用JSP/Servlet。比较出名的如IBM的 E-business,它的核心是采用JSP/Servlet的Web Sphere;西方另外一个非常著名的电子商务软件提供商,Intershop,它原来的产品Intershop1,2, 3, 4占据了主要的电子商务软件份额。
综上所述,jsp应该更有前途!
PHP与ASP.NET优劣势分析
不管你是不是已经选择了PHP,根据它在如下表格中在价格、速度、效率、安全性、平台支持性和开源与否上的表现,我们都能判断出它的强项是远胜 于弱点的。唯一不足的是缺少面向对象的支持。然而,这是个相对次要的缺陷,虽然不可忽视语言的结构,可是最终来说,优秀的编码还是归结于反复实践、执行、 好习惯和纪律。
价格:我不会单纯考量首次投资的价格,拿PHP来说,显然是免费的,但我们也要考虑开发、维护和调试的成本,你可能还要购买Zend优化引擎。 对于ASP,你在一开始就要投资购买产品,而且你还会在额外的技术上开销,比如购买图形处理的类库,或是其它。但从长远来看,PHP不会要求你去缴纳升级 费用或是购买更多的license。任何曾经接触过license的人都会知道公司往往会在确保产品的兼容性上花费大量时间和金钱。此外,发现bug并得 到修复的反馈处理情况也不尽相同,这其实也可换算为时间的消耗,进而影响到整个开发的成本。
速度和效率:就像我前面所提到的,ASP.NET是一个允许你使用多种不同编程语言的框架。此外,它还号称拥有出色的面向对象编程模型。确实如 此,可是这却带来了速度上的降低。谈到它的这些优点,对于相同功能的页面来说,比起PHP, 运行于ASP的页面需要其服务器分析、执行更多的代码。而PHP是“快餐型”的解决方案,先将功能搞定,还有很多健壮性上的问题可以留到2.0或是3.0 里进行补充,而且它的核心代码得到编译的优化,程序可以高速运行。速度并非唯一的考量,内存的耗用也很重要。
安全性:ASP.NET运行于IIS之上,这是个曾无数次遭受攻击的系统,几乎每周IT的新闻上都会有类似消息。实际上,它已成为一项负债,不 管整个市场投了多少美元在上面,很多IT的专业人士已经拒绝将他们的网络暴露于IIS Web服务器之下。而PHP与Apache工作在一起,它拥有良好的速度、可靠性的表现,还有过硬的安全性。
平台支持性:ASP.NET起初运行于IIS,现在也可以运行于Apache,而Apache能运行于所有平台。PHP天生就是设计运行于Apache上,所以你有很多被证明是可靠的平台去选择。
开源与否:开源并非只是那些理想主义程序员们的专利,也不是那些想要在license上节省几十美元的公司所特有的。当你碰到所购买的软件本身的bug的时候,开源可就是天赐良品。
无论是用ASP.NET还是PHP,都可能有很多用户用你的软件并发现bug。对于ASP.NET,这些bug就要经过一个官僚的过程来告知, 修复,验证,然后再等到下一个补丁时发布。而PHP的修复和发布都很快。任何看过开源开发的人都知道新的产品发布或是补丁经常是几天内的事情而不是商业软 件那样的几周或几个月。如果你认为那还不够快的话,如果你愿意,你也可以自己直接修复。
技术分析:.NET的优势与劣势
.NET Framework自2002年3月在日本国内上市以来,至今已一年有余。据估计标准集成.NET Framework的OS--Windows Server 2003将于2003年5月在日本上市。随着.NET环境的完善,作为足以抗衡Java的系统构筑基础,开发人员需要认识.NET Framework。下面笔者就来分析一下.NET的优势与劣势。
XML Web服务并未成为普及.NET的导火索
此前人们一直在想:“对.NET来说,是否存在不同于Java的、独特的应用领域和市场?”。
业内普遍认为,微软新一代系统构筑环境--.NET Framework是在研究Java的基础上开发出来的。不仅功能和架构相似,而且由于是在Java之后开发出来的,因此Java所没有的功能更是随处可见。比如在Web应用中实现事件驱动型应用程序功能等。
不过虽说如此,如果只是告诉用户“.NET Framework比Java好得多”,那么Java开发人员特意转而使用.NET Framework的动机不会太强。
由于Java已经先行积累了广泛的应用成果,积累了很多足以弥补其缺点的经验以及平台工具。只要不出现Java难以应用的用途和市场,那么.NET Framework就很难阻止Java的进一步发展。
.NET的优势:企业信息系统部门可自行编程
刚开始,微软就把易于开发XML Web服务作为.NET的优势而大加宣传。以XML Web服务为前提而设计的.NET与Web服务具有极高的亲和性。但XML Web服务的产生却比较晚。尽管业内对它的期待和关注程度较高,但由于可充分利用XML Web服务的“可赚钱的”业务模式尚未确立,所以目前与Web站点相比其市场仍微不足道。其中,Java方面也正在加紧完善便于开发XML Web服务的功能。
那么,是否存在.NET的独特用途呢?笔者通过采访所得到的一个答案是:.NET开发工具--Visual Studo.NET的易用性使得它在Java很难实现的“用户企业(信息系统部门)也可编程的系统”上超人一头。笔者认为可能还存在其他这样的领域。当 然,尽管.NET的标准语言VB.NET和C#都与Java一样复杂,但是Visual Studo.NET却很好地消除了这种复杂性。
比如,日本兰碧儿(NOEVIR)只靠自己的信息系统部门就完成了Web代理店支援系统的从企划到编程的全部工作。日本一家系统集成商曾表示,此前导入Java系统的用户企业中“选用.NET的信息系统部门就有望自行开发或对系统进行修改”。
笔者认为,由于Java本身较为复杂,且不易学习掌握,因此“用户企业只负责企划,而将编程工作完全委托给集成商的现象非常普遍”。
在COBOL和VB(客户商/服务器)的全盛时期,信息系统部门自己编程、对系统进行部分修改和功能追加是很正常的事情。如果连细小的系统修改 都要外包,那么系统的维护成本自然会很高,因此就将失去灵活性。甚至于还有可能削弱信息系统部门的业务能力。说到企划,听起来好听,但如果连大体的情况也 不了解,恐怕与开发商交涉都很困难。这也许就是Java的一个“弊端”吧。
此外,“成本比Unix低”以及“可以充分利用Windows技术资源”等原因也在加速.NET Framework的普及。作为客户端/服务器系统的开发环境,VB的后续语言--.NET中的“Windows Form”最具竞争力。越来越多的系统集成商开始选择这一工具构筑系统。
.NET的劣势:应用成果少、开放性差
反过来说,.NET的劣势则在于在大型系统中的应用成果少、缺乏“开放性”。
对于应用成果来说,今后其数量将会不断增加。据悉,日本Kabu.com证券将在2003年度内利用.NET Framework全面重新构筑该公司目前利用ASP构筑的系统。
在“开放性”方面又将会如何呢?Java普及的主要因素很多,但笔者认为其中最关键的在于“开放性”。由于可各种OS上运行,而且很多开发商还提供了Web应用服务器和开发工具,因此用户可以随意选择。而开发商则通过在功能和性能方面相互竞争来不断提高产品水平。
而.NET Framework怎么样呢?只要想应用于业务系统中,其OS实际上则只能限于Windows。尽管微软已经提供了FreeBSD版.NET Framework,但其目的仅限于学术研究。
今后人们所能期待的是Mono Project。Mono Project是指完全独立于微软、正在开发开放源码版.NET Framework的计划。主导该计划的是一家名为Ximian的Linux企业,这家公司成功地开发了Linux标准桌面环境GNOME,目前已受到业 界的广泛关注。
2003年1月该计划还发布了运行Web应用程序ASP.NET的Web服务软件XSP。尽管很多功能仍在开发之中,但目前开发工作进展顺利。 目前正面向Linux和Windows进行开发。据Mono Project称,由于该软件依赖于Linux的部分不多,因此能够轻松地向其他UNIX OS移植。
能否形成像Mono一样的开放环境将是.NET普及的关键所在。微软目前已经向业界标准化机构ECMA(欧洲计算机制造商协会)提交了.NET 标准,此举表明微软将采用开放标准。但目前尚不清楚此举只是单纯的一种姿态,还是真的要开放.NET。这就要看微软今后是否能够继续公开足够的相关标准和 信息了。
ASP.NET和PHP性能对比
经过一些筛选,只选择一些代表性的看法进行翻译, 对于英文不是太好的朋友比较有用, 如果有翻译和知识点上的错误,请指出。
首先, 排除偏激和未经测试的看法, 让我们来看看interscape和ttuttle怎么说
interscape(MVP) :
PHP是一个脚本语言, 而ASP.NET是一个面向对象, 编译性的语言。你不能让PHP在一个WINDOWS程序中运行, 但是你可以拷贝ASP.NET的代码并把它放到WINFORM程序里面, 而不用太大的修改。 但是如果你要谈及所有情况下的性能, 也许PHP会好一些, 不过我会为WEB开发选择OOP(面向对象编程)而不是step-thru(顺序编程)脚本编程方式。
ttuttle:
我不想去做任何专横武断(outrageous)的声明, 但是让我们来看一下一些事实:
PHP已经被证明比ASP3.0稍微快一些
ASP.NET比ASP3.0快3~5倍(一种类似于PHP的解析性脚本语言)(注:ttuttle这句出自于http://www.asp.net/whitepaper/whyaspnet.aspx)
ASP.NET可以存放在缓存(Output Caching)中, 当页面第一次被访问和编译后, 它可以从缓存中得到。 没有任何页面处理器会比缓存更快。
在默认安装下,ASP.NET是编译性语言, 而PHP和ASP3.0则是解释性语言。
面对这两种孑然不同的解释, 我再来看看ScottGu和 wysiwyg 还有 Xanderno怎么说
ScottGu(http://www.asp.net s的版主):
ASP.NET是编译性质而不是解释性质的。 所以语句可以被转换为更快的执行时间。
而PHP方面也有ZEND在出售其收费的编译器ADD-ON.
然而, 我们已经看到Nile benchmark(注:一种测试的性能基准,可以参看其白皮书http://www.gotdotnet.com/team/compare/Nile %20Benchmark%20Results.doc)中, ASP.NET和SQL这种组合的速度比PHP和MYSQL快 2~3倍, 且近乎5倍快于PHP和ORACLE的运行效率(即便ZEND编译器和缓存器已经安装)
wysiwyg:
虽然这个主题是ASP.NET VS PHP, 但是我来说一下我测试的事实却是 ASP要稍快于
ASP.NET在ASP中, 这段代码用了2秒
...................
.....store order info in myRS.....
.....store customer info in myTable.....
....................
Do while not myRS.eof
myTable.open "select customername from tblCustomer where customerID=" &
myRS.fields("CustomerID", myConnection
myArray(0,ubound(myArray,2))=myRS.fields("Ordernumber"
myArray(1,Ubound(myArray,2))=myRS.fields("OrderDate"
myArray(2,Ubound(myArray,2))=myTable.fields("CustomerName"
myTable.close
myRS.movenext
loop
而ASP.NET用了40秒
trace.warn("open conn: " & now)
...................
.....store order info in datatable myDataTable.....
.....store customer info in datatable myCustomer.....
....................
myDataView=new DataView(myCustomer)
for each myRow in myDataTable.rows
myDataview.rowFilter="CustomerID=" & myRow("CustomerID"
myRow("CustomerName"=myDataview(0).row("Customername"
next
trace.warn("finish looping: " & now)
我很希望自己的结果是ASP.NET快于ASP, 但是确相反, 谁能告诉我为什么??
(注: wysiwyg认为他自己做是测试,但是没有说明计算机和操作系统和测试环境的详细情况,也没说明是否属于哪一级别的压力测试)
Xanderno:
在我的不完善的测试中, 采用ACT 作为一种方法。 在一台配置低机器上面, 用ASP通过
一个SQL SERVER上的数据库获取数据, 每秒种我可以获得10~15页数据 。 同样的函数, 用ASP.NET, 每秒种我却可以获得30~40页数据, 使用输出缓存(output caching)后,
它上升为120页/秒。
微软提供一系列压力测试工具。 VS.NET企业版便有ACT, 如果你没有VS企业版, WACT也是一种可行的方法.WAST website -- http://webtool.rte.microsoft.com/
============================
从以上三人的看法, 也许大家已经得出较为正确的答案。 然而这些并不是第一次在ASP.NET和PHP运行效率的讨论。其他讨论, 还可以参看Debate - .NET V. PHP: Top 6 Reasons to Use NET(http://www.sitepoint.com/article/871)
还有Top 10 .NET Myths Exposed(http://www.webmasterbase.com/article/870)。
当然你有时间, 还可以看看由Owendo Technology做的Web Application Server Panorama(Web应用程序服务器全景)报告。这是一篇长达279页的报告。(http://e-serv.ebizq.net/shared/goldclub.jsp?owendo_1b.html )。
此外,还有人问了这样一个问题"VB.NET和C#哪个更快?"
Daniel P. 这样回答: 他们并没有区别, VB.NET和C#都是转换成 IL-Code(中间语言代码)---用来编译主程序的。
(注: 这种说法不一定正确, 两者的编译器是不一样的, 而且这个结论也没有经过严格的压力测试)
最后, 也许大家总是觉得程序员之间这种讨论看起来很funny, 很多人总是带有主观性进行讨论, 连一些编程大师级的老外也像小孩子一样在争论。 但是没有自己所爱的语言, 没有这种狂热又怎会有技术的进步。
评价:
没有任何东西是完美的!
没有最牛X的职业,只有不断开发新方法的玩家!