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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码执行速度:ASP.NET-MVC与PHP相关的知识,希望对你有一定的参考价值。

我和一位同事就这个问题进行了友好的争论,我个人认为ASP.NET-MVC编译的Web应用程序比用php编写的同一个项目更有效/更快地运行。我的朋友不同意。

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

为此,我试图向谷歌寻求答案,试图找到证据证明他是错误的,但大多数时候辩论变成了哪个平台更好地开发,成本,安全功能等......为此我真的不在乎这些论点。

我想知道什么是堆栈溢出社区对ASP.NET中使用MVC开发的网站的原始速度/效率的看法与使用PHP开发的完全相同的网站?

有没有人在现实场景中比较两种技术的性能有任何实际例子?

(我觉得对你们中的一些人来说,这很可能是一个无关紧要的,也许是愚蠢的论点,但这是一个争论,我仍然希望听到S.O.的优秀人才的答案)

答案

这是一个很难比较,因为各个堆栈的差异意味着你最终会以不同的方式做同样的事情,如果你为了比较而这样做,那么这不是一个非常现实的测试。

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

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

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

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

作为一个字节码解释平台,ASP.NET在理论上更快,但PHP可以做的限制是如此之高,以至于对大多数人来说无关紧要。例如,互联网上前20个访问过的网站中有4个是PHP。当您开始扩展比任何理论速度差异时,开发速度,稳健性,运行环境的成本等等往往更为重要。

请记住.Net具有原始类型,类型安全性和这些使代码比PHP运行更快的代码。如果您想进行一些不公平的测试,请在两个平台中对一百万个随机64位整数进行排序。 ASP.NET会杀死它,因为它们是原始类型,简单数组将比PHP的关联数组更有效(并且PHP中的所有数组最终都是关联的)。加上32位操作系统上的PHP将没有本机64位整数,因此会遭受巨大损失。

还应该指出的是,ASP.NET是预编译的,而PHP是即时解释的(不包括操作码缓存),这可能会有所不同,但PHP在这方面的灵活性是一件好事。能够在不弹跳服务器的情况下部署脚本非常棒。只需将其放入即可。辉煌。但最终它的表现不太好。

最终,虽然我认为你在争论什么是真正无关紧要的细节。

另一答案

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

  • 首先,不能比较它们制作一个增加值1.000.000的循环,这不是一个真实的案例。
  • 在我的开发环境中比起真实的生产环境并不是一样的。例如:在开发中,ASP.Net默认不使用IIS,使用具有不同优化的Inner Development服务器。在开发中,没有并发性。

所以我的观点是下一个:

  • 循环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个用户。

唯一重要的不是循环哪一个更快。问题是当网站是真实的并且正在生产时,他们可以容纳多少用户,页面有多重(更重= =更多来自用户的等待时间,更多的服务器净费用,更多的服务器磁盘费用,更多的内存费用服务器)。尝试使用并发检查时间,你会看到。

希望能帮助到你。

另一答案

C ++ ...现在,争论将在PHP和ASP.NET之间展开。 PHP将在易用性方面取胜,ASP.NET将在性能上获胜(在Windows服务器生态系统中)。很多以php开头的大型网站已经毕业于C ++。

另一答案

ASP.NET运行速度更快。 ASP.NET开发速度更快。购买快速的电脑,如果你做了严肃的商业网络应用程序,享受它

与PHP相比,ASP.NET代码的执行速度要快得多,当它在发布模式下构建,优化,缓存等等。但是,对于网站(除了像Facebook这样的大型玩家),它不那么重要 - 页面渲染时间的最长时间是访问和查询数据库。

在连接数据库中,ASP.NET要好得多 - 在asp.net中,我们通常使用LINQ,它将我们的对象查询转换为SQL Server数据库中的存储过程。此外,与数据库的连接是持久的,一对一的网站,不需要重新连接。

相比之下,PHP无法在请求之间保持sql server连接,它连接,从db中获取数据并销毁,当重新连接数据库时,页面渲染时间往往是20-30%。

此外,整个Web应用程序配置在每次请求时都会在php中重新加载,在asp.net中它会持久存储在内存中。它可以很容易地在像symfony / symfony2这样的大型企业框架中看到,很多渲染时间都是symfony内部处理,其中asp.net加载了一次,并且不会浪费你的服务器进行无用的工作。

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

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

ASP.NET语言是如此丰富,标准库有很多常见问题的解决方案,其中PHP标准库是......裸...他们不能保留一个命名约定。

.NET有类型,其中PHP是动态的,因此在您运行它或编写单元测试之前,它意味着无法控制源代码。

.NET有很好的IDE,其中PHP IDE是平均或平均良好的(PHPStorm仍然比VS + resharper差很多甚至没有它)

当ASP.NET脚手架集成到环境中时,symfony中的PHP脚手架从命令行触发。

如果你有像我这样的慢速计算机(一个核心2,2ghz),开发asp.net页面可能会很痛苦,因为你必须在任何源代码更改时重新编译项目,PHP代码会立即刷新。

与C#语法相比,PHP语言语法是如此未完成,不固定和裸露。 C#中强大的类型和许多灵活的语言功能可以加速您的开发并使您的代码减少错误。

另一答案

在我的(非硬件标记)体验中,Asp.Net在原始速度方面肯定可以与PHP竞争(在某些领域超过)。但与许多其他语言选择相关的问题类似,以下陈述(在这种情况下)是有效的(在我看来):

  • 语言x中存在缓慢的错误站点(无论是PHP还是Asp.Net)
  • 语言x中有很棒的快速站点(无论是PHP还是Asp.Net)

我想说的是:(开发人才)将影响整体速度,而不是两者之间的选择(在一些抽象范围内大致相当)。

实际上,“整体速度”比较并没有多大意义,因为两者都可以以某种方式相互追赶,除非你处于一个非常特殊的专业领域(你没有告诉我们)。

另一答案

我会说ASP.net

需要考虑的事项:

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

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

另一答案

我做过性能测试。

程序:10000000数字的总和

鉴于输出证明php比C#慢............

另一答案

没有任何优化,.net编译的应用程序当然会比php运行“更快”。但你是对的,这是一个愚蠢而无关紧要的论点,因为它与吹嘘权利之外的现实世界无关。

另一答案

通常,ASP.Net在给定硬件上的性能优于PHP。 ASP.Net MVC可以做得更好(可以在这里作为操作词)。大多数平台的设计都考虑到了企业开发。可测试代码,关注点分离等.ASP.Net中的许多膨胀来自页面内的对象堆栈(嵌套控件)。预编译可以提高性能,但它可能是一个关键问题。 MVC倾向于允许使用基于webforms的视图引擎(其他可用)进行较少的嵌套。

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

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

另一答案

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

例如,创建一个包含1,000,000行的表,其中包含一个顺序主键,然后在第二列中创建一个随机#。您的每个站点都可以接受GET中的主键,根据传入的键检索随机#,并在某种类型的动态生成的html中显示随机#。

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

如果你可以在常规ASP中构建这个简单的小应用程序会更好。哎呀,如果测试设计得很好,我甚至会付钱给你这些结果。说真的 - 在这里表达你的兴趣,我会给你发电子邮件。

另一答案

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

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

再见/!

以上是关于代码执行速度:ASP.NET-MVC与PHP的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET-MVC中Entity和Model之间的关系

ASP.NET-MVC:数据库默认值会破坏单元测试的精神吗? [关闭]

ASP.NET-MVC jQuery 不显眼的远程验证返回误报

ASP.NET-MVC5 - 为啥 Bootstrap v4 主题不能正确显示组件?

asp.net-mvc:js文件中的剃刀'@'符号

如何在 asp.net-mvc 控制器中集中授权逻辑?