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

关于这个问题,我和一个同事进行了一场友好的争论,我个人的观点是,一个 ASP.NET-MVC 编译的 web 应用程序会比用 PHP 编写的同一个项目运行得更有效/更快。我朋友不同意。

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

对此,我试图在谷歌上搜索答案,试图找到证据来证明他是错的,但大多数时候,争论的焦点都集中在哪个平台更适合开发、成本、安全功能等方面。.为了这场争论,我真的不在乎那些。

我想知道堆栈溢出社区是如何看待使用 MVC 开发的 ASP.NET 网站和使用 PHP 开发的完全相同的网站的原始速度/效率的?

是否有人有任何实际的例子在现实世界的情况下比较这两种技术的性能?

(我知道对你们中的一些人来说,这很可能是一个无关紧要的,也许是愚蠢的论点,但它确实是一个论点,我仍然希望听到 S.O. 这里优秀人士的答案。)

71235 次浏览

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

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

多年来,为了提高性能,人们进行了各种各样的优化,最引人注目的是 APC 的操作码缓存(如此之多,以至于 APC 将成为 PHP 6的标准部分,而不是像现在这样的可选模块)。

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

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

作为一个字节码解释平台,ASP.NET 理论上更快,但是 PHP 的限制太高,以至于对大多数人来说无关紧要。例如,互联网上访问量最大的20个网站中有4个是 PHP。开发速度、健壮性、运行环境的成本等等。.比起任何理论上的速度差异,当你开始缩放的时候就会变得更加重要。

记住。Net 具有基本类型、类型安全以及诸如此类的特性,这些特性使得代码比 PHP 运行起来更快。如果你想做一个有点不公平的测试,在两个平台上对一百万个随机的64位整数进行排序。NET 会杀死它,因为它们是基本类型,简单数组比 PHP 的关联数组更有效(PHP 中的所有数组最终都是关联的)。另外,PHP 在32位操作系统上不会有一个本地的64位整数,因此将遭受巨大的损失。

还应该指出的是,ASP.NET 是预编译的,而 PHP 是动态解释的(不包括操作码缓存) ,这可能会有所不同,但 PHP 在这方面的灵活性是一件好事。能够在不反弹服务器的情况下部署脚本非常好。放进去就行了。太棒了。但它最终的表现要差一些。

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

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

  • 在 X 语言(PHP 或 Asp.Net)中有一些缓慢的、漏洞百出的站点
  • 在 X 语言中有一些很棒的、快速的站点(可以是 PHP 或 Asp.Net)

我想说的是: (开发人员的才能)将影响整体速度比两个(在某种抽象的程度上大致相当)技术之间的选择更多。

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

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

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

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

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

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

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

它实际上可以归结为站点/应用程序的细节。这个站点碰巧在相当普通的硬件上运行 MVC 非常好。PHP 下的类似站点可能会受到自身重量的影响。还有其他事情要考虑。IIS vs Apache vs LightHTTPD 等等。老实说,php 和 asp.net 之间的差异远远超过了原始的性能差异。PHP 不适合大型复杂的应用程序,就像 asp.net mvc 一样,就是这么简单... ... 这本身与 VS + SCC 的关系比其他任何东西都要大。

在不进行任何优化的情况下,。Net 编译的应用程序当然会比 php 运行得“更快”。但你说得对,这是一个愚蠢而无关紧要的论点,因为除了炫耀之外,它对现实世界没有任何影响。

需要注意的问题是.NETMVC VS PHP,而不是.NET (Web 窗体) VS PHP。 我没有事实,但一般感觉是 PHP 网站运行速度比。NET 网站表单站点(我做。网)。.NET web 表单,尽管正在编译与解释 PHP 通常是缓慢的,因为所有的代码块是自动生成的。NET 引擎为设计模式下使用的每个 < asp: control > 呈现 HTML。得到一个。NET web 表单与 PHP 竞争的速度是一个完全的疾病,从设置 EnableViewState = false 开始,并可以结束使用每个 html 控件与 runat = server... 疯狂,嗯?

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

再见!

应该是 ASP.net

需要考虑的事情:

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

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

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

NET 代码在构建发布模式、优化、缓存等等时,执行速度比 PHP 快得多。但是,对于网站(除了像 Facebook 这样的大玩家)来说,这就不那么重要了——页面渲染的大部分时间都花在访问和查询数据库上。

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

相比之下,PHP 不能在请求之间保持 sql 服务器连接,它连接、从数据库中获取数据并破坏,当重新连接数据库时通常占页面呈现时间的20-30% 。

另外,每个请求都会在 php 中重新加载整个 web 应用程序配置,在 asp.net 中,它会保存在内存中。很容易在 symfony/symfony2这样的大型企业框架中看到它,大量的渲染时间是 symfony 内部进程,asp.net 只加载一次,不会因为无用的工作而浪费你的服务器。

NET 可以将对象保存在应用程序内存的缓存中——在 php 中,你必须将它写到文件中,或者使用诸如 memcache 之类的黑客技术。使用 memcache 需要处理大量的并发和风险问题(在文件中存储缓存也有它自己的并发问题——每个请求都会启动 apache 服务器的新线程,许多请求可以一次性工作——你必须考虑这些线程之间的并发性,这需要大量的开发时间,而且并不总是能够工作,因为 php 在语言中没有任何互斥机制,所以你无论如何都不能创建关键部分)。

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

NET 语言是如此丰富,标准库有很多常见问题的解决方案,其中 PHP 标准库是... 赤裸裸的... 他们不能保持一个变数命名原则。

.NET 具有类型,其中 PHP 是动态的,所以它意味着在运行源代码或编写单元测试之前不能控制源代码。

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

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

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

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

我做过性能测试。

程序: 1000000个数字之和

enter image description here

enter image description here

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

C + + ... 现在 PHP 和 ASP.NET 之间将是一场战斗。PHP 将在易用性上获胜,ASP.NET 将在性能上获胜(在 Windows 服务器生态系统中)。很多以 php 开始的大型网站已经升级到了 C + + 。

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

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

  • 在我的开发环境中比较它们不同于一个真正的生产环境。在开发中 ASP.Net 默认不使用 IIS,使用内部开发服务器进行不同的优化。在 dev 中,没有并发性。

所以我的观点是:

  • 循环1.000.000次 c # 会更快

  • 服务一个真正的网页,访问数据库,显示图像,有形式等..。 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个用户。

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

希望能有帮助。