代码执行的速度:ASP.NET-MVC与PHP

我和一个同事讨论了这个问题,我个人认为ASP.NET MVC编译的Web应用程序的运行速度要比使用PHP编写的同样的项目更快。 我的朋友不同意。

不幸的是,我没有任何可以用来支持我的论点的可靠数据。 (他也没有)

为此,我试图向谷歌寻求答案,find证据certificate他是错的,但大部分时间辩论变成了哪个平台,最好是在开发,成本,安全特性等方面。为了这个缘故我真的不在乎这些。

我想知道什么堆栈溢出社区认为一般网站的原始速度/效率在ASP.NET开发与MVC与完全相同的网站用PHP开发?

在比较两种技术的性能的真实情况下,有没有人有任何实际的例子?

(我对你们中的一些人认识到,这可能是一个不相干的,也许是愚蠢的论点,但这是一个争论,我仍然希望听到这里的优秀人士的答案)

这是一个艰难的比较,因为在各自的堆栈的差异意味着你最终做同样的事情不同,如果你做他们相同的比较目的不是一个非常现实的testing。

我喜欢PHP,它以最基本的forms加载了每个请求,解释并丢弃。 在这方面它非常像CGI(考虑到它大约15岁,这并不奇怪)。

现在,多年来已经有各种优化来提高性能,例如最显着的是使用APC进行操作码caching(以至于APC将成为PHP 6的标准部分,而不是像现在这样的可选模块)。

但是PHP脚本仍然是暂时的。 会话信息是(通常)基于文件和互斥(session_start()阻止其他脚本访问相同的用户会话,直到session_commit()或脚本完成),而在ASP.NET中则不是这种情况。 除了会话数据之外,在ASP.NET的应用程序上下文中(或者在Java上,ASP.NET更类似于这种情况)存在的对象是相当容易的(也是正常的)。

这是一个关键的区别。 例如,PHP中的数据库访问(使用mysql,mysqli,PDO等)是暂时的(持久连接尽pipe),而.Net / Java几乎总是使用持久连接池,并在此基础上构buildORM框架等,超出任何特定请求的caching。

作为一个字节码解释平台,ASP.NET在理论上速度更快,但是PHP能够做到的极限对于大多数人来说是无关紧要的。 互联网前20位访问过的网站中有4个是以PHP为例。 开发速度,稳健性,运行环境的成本等等,当你开始比任何理论上的速度差异开始缩放时,往往变得更加重要。

请记住,.Net具有原始types,types安全和这些types的东西,使得代码更快比PHP可以运行它。 如果你想做一个有点不公平的testing,在两个平台上对一百万个随机的64位整数进行sorting。 ASP.NET会杀死它,因为它们是原始types,简单的数组比PHP的关联数组更有效率(PHP中的所有数组最终都是关联的)。 加上32位操作系统上的PHP将不会有一个本地的64位整数,所以会受到巨大的影响。

还应该指出的是,ASP.NET是预编译的,而PHP是dynamic解释(不包括操作码caching),这可以有所作为,但PHP在这方面的灵活性是一件好事。 能够在不反弹服务器的情况下部署脚本非常棒。 只要把它放进去就行了 辉煌。 但最终性能较差。

最终,尽pipe我认为你在争论什么是一个无关的细节。

ASP.NET运行速度更快。 ASP.NET开发速度更快。 购买快速的电脑,并享受它,如果你认真的商业Web应用程序

与PHP相比,ASP.NET代码的执行速度要快很多,比如在Release模式下,优化,caching等等。但是,对于网站(除Facebook之类的大玩家除外),它并不重要 – 大部分页面渲染时间是访问和查询数据库。

在连接数据库中ASP.NET要好得多 – 在asp.net中,我们通常使用LINQ,它将我们的对象查询翻译成SQL服务器数据库中的存储过程。 也连接数据库是持久的,一对一的网站,不需要重新连接。

PHP相比,不能容纳sql server之间的连接请求,它连接,从db抓取数据并销毁,重新连接数据库时往往是页面呈现时间的20-30%。

也是整个Web应用程序configuration重新加载在PHP的每个请求,在asp.net它坚持在内存中。 在像symfony / symfony2这样的大型企业框架中很容易看到,很多渲染时间都是symfony的内部处理,asp.net加载它一次,不要浪费你的服务器进行无用的工作。

ASP.NET可以将对象保存在应用程序内存中的caching中 – 在PHP中,您必须将其写入文件或使用像memcache一样的hack。 使用memcache是​​很多并发和危险问题的工作(在文件中存储caching也有自己的并发问题 – 每个请求启动Apache服务器的新线程,许多请求可以在一次工作 – 你必须考虑之间的并发性线程,它花了很多的开发时间,并不总是工作,因为PHP没有任何互斥机制的语言,所以你不能以任何方式使关键部分)。

现在有一些关于开发速度的东西:ASP.NET有两个为它devise的主要框架(Webforms和MVC),安装了环境,在PHP中你必须得到一个开源框架。 在asp中没有像php这样的标准框架。

ASP.NET语言是如此丰富,标准库有非常常见的问题的解决scheme,PHP标准库是…裸体…他们不能保持一个命名约定。

.NET有types,其中PHP是dynamic的,所以在运行或编写unit testing之前,这意味着无法控制源代码。

.NET有很棒的IDE,其中PHP IDE的平均水平或平均水平(PHPStorm仍然比VS + resharper还差很多,甚至没有)

在ASP.NET脚手架集成到环境中时,symfony中的脚手架从命令行被激发。

如果你的计算机像我的(一个核心2,2ghz)慢,开发asp.net页面可能是痛苦的,因为你必须重新编译你的项目的任何改变的源代码,其中PHP代码立即刷新。

与C#语法相比,PHP语言的语法是如此的未完成,没有实现,也没有裸体。 C#中强大的types和许多灵活的语言特性可以加速您的开发,并使您的代码减less错误。

在我的(非硬性标记)经验中,Asp.Net当然可以在原始速度上竞争(在某些领域超越)PHP。 但类似于很多其他语言select相关的问题,以下陈述(在本例中)是有效的(在我看来):

  • 在x语言中有缓慢的错误站点(无论是PHP还是Asp.Net)
  • 在x语言中有很好很快的网站(不pipe是PHP还是Asp.Net)

我想说的是:开发人员(人才)会影响总体速度,而不是两者之间的select(大致相当于某些抽象程度)的技术。

真的,“总体速度”比较没有什么意义,因为除非你在一个非常具体的专业领域(你没有通知我们),否则两者都可以以某种方式彼此追赶。

我会说ASP.net

需要考虑的事项:

  • ASP.net是预编译的
  • ASP.net通常是用C#编写的,它应该比PHP执行得更快

当然,差异是非常小的。 两者都有优点,我认为PHP更易于部署,并且可以在任何服务器上运行,而不仅仅是IIS。 虽然我很喜欢ASP.net MVC。

我已经做了性能testing。

计划:10000000个数字的总和

在这里输入图像说明

在这里输入图像说明

鉴于输出certificate,PHP是慢的C#

我偶然发现了一个硬编码的博客,并在Linux和Windows上比较两个平台进行了真正的testing。 我必须说我去与ASP.net选项。

http://naspinski.net/post/AspNet-vs-php–speed-comparison.aspx

没有任何优化,.NET编译的应用程序当然会运行“比PHP更快”。 但是你是对的,这是一个愚蠢的,不相干的论点,因为它与吹牛权之外的现实世界没有任何关系。

一般来说,ASP.Net在给定的硬件上比PHP执行效果更好。 ASP.Net MVC可以做的更好(可以在这里操作的话)。 该平台的大部分devise考虑到企业发展。 可testing代码,关注点分离等。ASP.Net中的大量膨胀来自页面内的对象堆栈(嵌套控件)。 预编译使这个更好的性能,但它可能是一个关键问题。 MVC可以减less嵌套,使用基于webforms的视图引擎(其他可用)。

Web应用程序最大的减速趋于远程服务,特别是数据库持久性。 PHP编程时没有连接池或内存中会话状态的好处。 这可以通过memcached和其他更高性能的服务层(也可以通过.Net)来克服。

这真的归结为网站/应用程序的细节。 这个网站恰好在相当适中的硬件上运行MVC。 PHP下的类似网站可能会受到其自身的影响。 其他事情要考虑。 IIS与Apache vs LightHTTPD等。老实说,PHP与asp.net是远远超过原始的性能差异。 PHP并不适合大型,复杂的应用程序,几乎和asp.net mvc一样,就是这么简单…这本身与VS + SCC的关系比其他任何东西都要多。

我倾向于同意你的观点(即ASP.NET MVC更快),但是为什么不和你的朋友友好下注并分享结果呢? 创build一个非常简单的DYNAMIC页面,从一个MySQL数据库派生,并多次加载页面。

例如,创build一个包含连续主键的1,000,000行的表,然后在第二列中创build一个随机数。 您的每个站点都可以接受GET中的主键,根据传入的键检索随机数,并在某种types的dynamic生成的html中显示随机数。

我很想知道结果…如果你有博客或类似的东西,世界其他地方也会这样(这个问题总是被问到)。

如果你可以在普通的ASP中构build这个简单的小应用,那将会更好。 如果testingdevise的很好,我甚至会为你付出这些结果。 认真 – 只是expression你的兴趣在这里,我会给你发我的电子邮件。

需要注意的问题是.NET MVC vs PHP,而不是.NET(Web Forms)vs PHP。 我没有事实,但一般的感觉是PHP网站运行速度比.NET Web表单网站(我只有.NET的)。 .NET web表单尽pipe被编译和解释,但是PHP通常很慢,因为所有由.NET引擎自动生成的代码块用于呈现devise模式下使用的每个<asp:control>的HTML。 获得一个.NET的网页forms与PHP竞争的速度是一个完整的odisea,从设置EnableViewState = false开始,并可以结束使用runat = server的每个html控制…疯狂呃?

现在,MVC是一个不同的故事,我已经使用.NET MVC2做了两个网站,感觉很好,现在可以感受到速度! 代码和任何PHP网站一样干净。 所以,现在,MVC允许你像PHP那样编写干净的代码,而MVC是针对PHP解释编译的,它只能导致一件事,MVC比PHP更快…时间会certificate,当一般意义上是“MVC网站运行比PHP快“,那么我们今天在这里所说的就是对的。

再见/!

C ++ …现在这场战斗将在PHP和ASP.NET之间展开。 PHP将赢得易用性,ASP.NET将赢得性能(在Windows服务器生态系统)。 许多以PHP开始的大型网站已经gradle于C ++。

我是两种技术(ASP.Net c#和PHP5)的开发专家。 经过多年的工作和在实际生产环境中的比较,这些是我的印象:

  • 首先,不能比较他们做一个循环的增值1.000.000,这不是一个真实的情况。

  • 在我的开发环境中比起真实的生产环境来比较它们是不一样的。 例如:在开发ASP.Net默认情况下不使用IIS,使用具有不同优化的内部开发服务器。 在开发中,没有并发性。

所以我的意见是下一个:

  • 循环1.000.000次c#将会更快(无意义)

  • 服务一个真正的页面,访问数据库,显示图像,表格等… ASP.Net比PHP慢。

  • ASPX页面的重量比PHP重10倍,所以这使最终用户等待更多的时间来获取页面。

  • ASPX开发比PHP慢,这很重要,因为最后是钱。 我们在PHP中比在ASP.Net中开发速度快了35%,因为每次你想检查smthg时都必须编译和重启。

  • 在大项目中,ASP.Net长期来说更适合避免错误,而且体系结构复杂。

  • 由于Windows服务器,IIS,….最后你需要一个强大的服务器,以保持在ASP相同的用户量比PHP。 例如:我们使用ASP.net,并发用户数为20.000,而在PHP中,同一台服务器可以使用30,000用户。

唯一重要的不是循环哪一个更快。 事情是网站是真实的,在生产中,他们可以容纳多less用户,页面有多重(用户等待的时间越长,服务器的净收费越多,服务器的磁盘费用越多,服务器)。 尝试检查并发的时间,你会看到。

希望能帮助到你。