`
love~ruby+rails
  • 浏览: 849465 次
  • 性别: Icon_minigender_1
  • 来自: lanzhou
社区版块
存档分类
最新评论

ASP.NET vs. PHP,哪个更快?

阅读更多
上个月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),却没人能给出明确的数据。 根据Joe的描述,测试环境如下: 所有的测试都在同一台机器上运行(拥有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,不过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支持)。 Joe认为,这表示: 我们可以这么认为,对于纯粹的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位系统之间的比较——这些测试的目的并不是为了体现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构建的也是错误的。有些是,有些不是。 Joe补充道: 如果你们看到这一数据之后对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实践把这部分性能补回来。 我在进行Drupal开发,我对PHP最熟悉,因此我宁愿多花一些硬件来保持更好的开发效率。 这些都是很不错的评论! 此外,根据上一次实验的结果,在Windows平台上运行PHP时,在MySQL和文件的访问上有一些性能问题,微软许多团队都向我获取了相关信息。希望这些数据都够转变为切实的改进。 Joe表示,他将收集大家认为更公平,更有意义的测试场景。以下是他所计划的测试项目: 实际页面测试:循环,寒暑调用和对象操作是一类测试,不过页面的整体呈现则是另一种有意义的测试。 负载测试:哪一个环境可以同时处理更大量的请求。 在负载测试中,哪一方的性能会下降地更快。 在各种情况下,64位平台的表现如何。 国内也曾经进行过PHP在Linux和Windows平台上的性能测试。InfoQ曾经报道过微软在WordCamp China 2009大会上公开了之前与康盛创想合作进行的性能评估结果:在Windows Server 2008 + IIS上运行PHP,从平均相应时间,每秒处理的请求数,以及数据吞吐量等多方便均优于Linux + Apache的托管方式。 您的看法如何?您希望看到什么样的测试呢?
分享到:
评论

相关推荐

    ASP.NET.JSP.PHP教材

    在教材中,你将深入学习如何使用ASP.NET的MVC(Model-View-Controller)模式,以及Web Forms,理解这些模式如何帮助分离关注点并实现更好的代码组织。 JSP(JavaServer Pages)是由Sun Microsystems(现在属于...

    asp.net.php本地测试工具(自己做的)

    为了更好地利用这个工具,用户需要了解ASP.NET和PHP的基本语法以及它们与服务器交互的方式。对于ASP.NET,理解控件模型、MVC框架、ADO.NET数据访问等概念是必要的。而对于PHP,熟悉面向对象编程、PHP与MySQL的连接、...

    ASP.net从入门到实践

    【ASP.NET从入门到实践】 ASP.NET是微软公司推出的一种用于构建Web应用程序的框架,它构建于.NET Framework之上,...随着技术的不断迭代,ASP.NET也逐渐引入了更现代的框架如ASP.NET Core,继续推动Web开发的进步。

    ASP.NET MVC 5 网站开发之美

    7. **单元测试与TDD**:ASP.NET MVC 5 支持测试驱动开发(TDD),其设计使得应用程序更易于进行单元测试,确保代码质量。 8. **Bootstrap与响应式设计**:很多ASP.NET MVC 5模板集成了Bootstrap框架,提供了一套...

    [ASP.NET,PHP,Javascript,Ajax教程].Wrox.Beginning.Ajax.with.ASP.NET.(英文)

    它主要通过在后台与服务器进行少量数据交换来实现这一点,从而使得网页交互更快更流畅。而ASP.NET是Microsoft推出的一个用于构建动态Web应用程序的框架,它可以使用C#或VB.NET等语言编写代码,同时提供了丰富的工具...

    Professional ASP.NET 1.1

    这本书的随书代码库包含了使用C#和VB.NET两种主要.NET编程语言实现的示例和项目,旨在帮助读者更好地理解和应用ASP.NET技术。 ASP.NET是Microsoft .NET Framework的重要组成部分,它为构建动态、数据驱动的Web应用...

    基于ASP.NET汽车4S店网站源码.zip

    ASP.NET的核心优势在于它的事件驱动模型、编译式编程以及内置的安全特性,使得开发者可以更快速、更安全地构建动态网站、Web服务和富互联网应用程序。 【C#语言基础】 作为ASP.NET的主要编程语言,C#(发音为"C ...

    asp.net视频插件

    ASP.NET视频插件是一种用于在ASP.NET web应用中集成视频播放功能的软件组件。它能够帮助开发者轻松地在网页上嵌入视频,提供流畅的用户体验,同时支持多种服务器端技术,如ASP、ASP.NET、PHP和JSP。这使得无论你的...

    CKeditor(网页在线编辑器)for ASP.NET v3.6.2.rar

    CKeditor是一款广泛应用于网页开发中的在线文本编辑器,尤其在ASP.NET框架下,它提供了强大的富文本编辑功能,使得用户可以在浏览器端实现所见即所得(WYSIWYG)的编辑体验。CKeditor v3.6.2是该编辑器的一个特定...

    目前功能最强界面最友好的html编辑器,支持ASP、PHP、JSP、ASP.NET

    标题和描述提到的是一款强大的HTML编辑器,这款编辑器的独特之处在于它不仅支持基本的HTML,还特别强调了对服务器端脚本语言的兼容性,包括ASP、PHP、JSP以及ASP.NET。这四个标签分别代表了四种不同的Web应用程序...

    基于ASP.net的手机端会议室预约系统源码.zip

    【标题】:“基于ASP.NET的手机端会议室预约系统源码”是一个用于开发移动设备上的会议室预订应用程序的软件项目。这个源代码集适用于那些希望通过互联网技术实现会议室管理的机构或企业,特别是希望用户能够通过...

    ASP.NET知识大全1

    ASP.NET是微软公司推出的用于构建Web应用程序的框架,它基于.NET Framework,旨在提供更高效、更易用的开发环境和更强大的功能。本篇将详细阐述ASP.NET的基础知识,包括其起源、发展、核心概念以及与相关技术的区别...

    人才网 asp asp.net php

    ASP.NET则更适合大型企业,提供更强大的功能和更好的可维护性;而PHP因其开源、低成本和高性能的特点,成为了许多人才网开发的首选。在实际应用中,开发者应根据项目规模、预算、团队技能等因素综合考虑,选择最合适...

    PHP与ASP.NET优劣势分析.pdf

    PHP与ASP.NET优劣势分析 在Web开发领域中,PHP和ASP.NET是两个非常流行的平台,但是它们在性能、安全性、价格、开源性等方面存在着很大的差异。下面我们将对这两个平台进行详细的分析和比较。 性能 从性能方面来...

    PHP TO ASP.NET 2.0开发系列课程(1):PHP与ASP.NET2.0之比较分析

    标题中的“PHP TO ASP.NET 2.0开发系列课程(1):PHP与ASP.NET2.0之比较分析”表明本课程主要关注的是对两种不同的Web开发技术——PHP和ASP.NET 2.0的对比研究。这个课程可能是针对那些希望了解这两种语言优缺点,...

    ASP.NET源码——phpFreeChat.zip

    phpFreeChat是一款开源的实时聊天解决方案,通常用PHP开发,但在ASP.NET环境下,开发者可能已经将其移植到.NET平台,以利用ASP.NET的优势,如强大的性能、安全性以及与微软生态系统更紧密的集成。源码分析可以从以下...

    ASP在线编辑器,ASP.NET在线编辑器,PHP在线编辑器JS部分更正

    ASP.NET是ASP的升级版,基于.NET框架,提供了更强大的功能和更好的性能。ASP.NET在线编辑器不仅支持基本的文本编辑,还可能集成版本控制、调试工具和项目管理功能,为开发者提供了一个全面的开发环境。 PHP...

    ASP.net+Word

    Web开发技巧不断的完善,更多更加丰富的应用程序也随之诞生,ASP.NET使用.NET平台进行Web应用程序的开发有着先天性的优势,开发人员能够快速的使用ASP.NET提供的控件和开发方法进行复杂的应用程序开发,同时ASP.NET...

    ASP.NET中FCKEditor配置教程

    打开`fckeditor`目录下的`fckconfig.js`文件,修改`_FileBrowserLanguage`和`_QuickUploadLanguage`变量,将它们从默认的语言(如'php')更改为'aspx',以支持ASP.NET环境。 4. **设置上传文件认证**: 打开`...

Global site tag (gtag.js) - Google Analytics