75

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

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

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

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

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

(我意识到对于你们中的一些人来说,这很可能是一个无关紧要甚至愚蠢的论点,但这是一个论点,我仍然想听听这里的优秀人士的答案)

4

11 回答 11

71

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

我喜欢的 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 在这方面的灵活性是一件好事。能够在不反弹服务器的情况下部署脚本非常棒。只需将其放入即可。杰出的。但它最终的性能较差。

最终,尽管我认为您在争论什么才是真正无关紧要的细节。

于 2009-03-28T01:18:27.430 回答
33

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

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

在连接数据库方面,ASP.NET 要好得多——在 asp.net 中,我们通常使用 LINQ,它将我们的对象查询转换为 SQL 服务器数据库中的存储过程。与数据库的连接也是持久的,一对一的网站,无需重新连接。

相比之下,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 中你必须获得一个开源框架。php 中没有像 asp.NET 那样的标准框架。

ASP.NET 语言是如此丰富,标准库有解决非常常见问题的方法,其中 PHP 标准库是......赤裸裸的......他们不能保持一种命名约定。

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

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

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

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

与 C# 语法相比,PHP 语言的语法是如此的未完成、不稳固和赤裸裸。C# 中的强类型和许多灵活的语言特性可以加快您的开发速度并减少代码错误。

于 2012-06-05T23:27:08.857 回答
23

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

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

我想说的是:开发人员的(人才)将影响整体速度,而不是在两种(在某种抽象程度上大致等效)技术之间进行选择。

确实,“整体速度”比较没有多大意义,因为除非您处于非常特定的专业领域(您尚未告知我们),否则两者都可以以某种方式相互赶超。

于 2009-03-28T01:39:21.563 回答
18

我做过性能测试。

程序:10000000 个数字的总和

在此处输入图像描述

在此处输入图像描述

给定的输出证明php比C#慢............

于 2014-03-27T12:04:33.337 回答
15

我会说 ASP.net

需要考虑的事项:

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

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

于 2012-03-05T19:16:24.937 回答
12

我是两种技术(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、.... 最后,您需要一个强大的服务器来容纳与 PHP 相同数量的 ASP 用户。例如:我们使用 ASP.net 提供大约 20.000 个并发用户,而在 PHP 中,同一台服务器可以获取大约 30.000 个用户。

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

希望能帮助到你。

于 2015-01-28T09:25:14.110 回答
7

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

于 2009-08-30T07:44:03.303 回答
3

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

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

它实际上归结为站点/应用程序的细节。这个站点恰好在相当普通的硬件上很好地运行 MVC。PHP 下的类似网站可能会因自身的重量而下降。其他要考虑的事情。IIS vs. Apache vs LightHTTPD 等。老实说,php vs asp.net 不仅仅是原始性能差异。PHP 并不像 asp.net mvc 那样适合大型、复杂的应用程序,它就是这么简单……这本身与 VS+SCC 的关系比其他任何事情都多。

于 2009-03-28T02:38:50.700 回答
1

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

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

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

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

于 2009-03-28T01:56:47.573 回答
1

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

现在,MVC 就不同了,我用 .NET MVC2 做了两个网站,感觉不错,现在可以感受一下速度了!并且代码与任何 PHP 网站一样干净。所以,现在,MVC 可以让你像 PHP 一样编写干净的代码,而 MVC 是针对 PHP 解释编译的,它只能导致一件事,MVC 比 PHP 快……时间会证明,当一般意义上是“MVC 网站运行比 PHP 更快”,那么我们今天在这里所说的就是正确的。

再见/!

于 2010-10-10T13:24:34.170 回答
-3

C++... 现在战斗将在 PHP 和 ASP.NET 之间展开。PHP 将赢得易用性,ASP.NET 将赢得性能(在 Windows 服务器生态系统中)。很多以 php 开头的大型网站都已升级为 C++。

于 2015-01-25T05:00:23.400 回答