繁体   English   中英

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

[英]Speed of code execution: ASP.NET-MVC versus PHP

我对此同事的看法很友好,我个人的观点是,与用PHP编写的相同项目相比,ASP.NET-MVC编译的Web应用程序可以更高效/更快地运行。 我的朋友不同意。

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

为此,我尝试向Google寻求答案,以尝试找到证据证明他是错误的,但是大多数时候,辩论都转向开发哪种平台,成本,安全性等方面更好。为此,论证我真的不在乎任何。

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

在现实世界中,有没有人将这两种技术的性能进行比较的实际例子?

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

之所以很难进行比较,是因为各个堆栈之间的差异意味着您最终做同一件事的方式不同,如果出于比较目的而进行相同的操作,那将不是一个很现实的测试。

我喜欢的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运行速度更快。 ASP.NET开发速度更快。 购买快速的计算机,如果您做认真的商业Web应用程序,请尽情享用

与PHP相比,ASP.NET代码在发布模式下进行构建,优化,缓存等时,其执行速度要比PHP快得多。但是,对于网站(大型播放器(如Facebook)除外)而言,它的重要性降低了-大多数时间是页面呈现时间访问和查询数据库。

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

相比之下,PHP无法在请求之间保持sql服务器连接,它无法连接,从db抓取数据并销毁,而在重新连接数据库时通常占页面呈现时间的20%至30%。

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

ASP.NET可以将对象保存在应用程序内存中的缓存中-在php中,您必须将其写入文件,或使用像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竞争(在某些方面甚至超过PHP)。 但是,与许多其他与语言选择相关的问题类似,(在我看来)以下陈述是有效的(在我看来):

  • 有x语言的慢速越野车网站(无论是PHP还是Asp.Net)
  • 有很多很棒的语言x的网站(无论是PHP还是Asp.Net)

我要说的是:开发人员的(人才)对整体速度的影响将大于在两种(在某种程度上抽象上相等)技术之间进行选择的可能性。

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

我已经做过性能测试。

程序:10000000个数字的总和

在此处输入图片说明

在此处输入图片说明

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

我会说ASP.net

注意事项:

  • ASP.net已预编译
  • ASP.net通常用C#编写,其执行速度应比PHP快

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

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

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

  • 首先,不能对它们进行比较,从而形成一个值1.000.000相加的循环,这不是真实情况。

  • 在我的开发环境中将它们与实际生产环境进行比较是不同的。 例如:在开发中,ASP.Net默认情况下不使用IIS,请使用具有不同优化功能的内部开发服务器。 在开发人员中,没有并发。

所以我的意见是下一个:

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

  • 服务于访问DB,显示图像,具有表格等的真实页面。ASP.Net比PHP慢。

  • ASPX页面的重量比PHP重10倍,因此最终用户要等待更多时间来获取页面。

  • ASPX的开发速度比PHP慢,这很重要,因为最终是金钱。 我们在PHP中开发的速度比ASP.Net快35%,因为每次您要检查smthg时都必须编译并重新启动。

  • 在大型项目中,长期使用ASP.Net可以更好地避免错误并具有复杂的体系结构。

  • 由于Windows Servers,IIS,...。最后,您需要一个功能强大的服务器来在ASP上容纳与PHP相同数量的用户。 例如:我们为ASP.net提供20.000个并发用户,而在PHP中,同一台服务器可以获得30.000个并发用户。

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

希望能帮助到你。

通常,ASP.Net在给定的硬件上将比PHP表现更好。 ASP.Net MVC仍然可以做得更好(在这里可以作为执行词)。 大多数平台在设计时都考虑了企业发展。 可测试的代码,关注点分离等。ASP.Net中的许多膨胀来自页面内的对象堆栈(嵌套控件)。 预编译使该性能更好,但这可能是一个关键问题。 使用基于Web窗体的视图引擎(其他可用),MVC倾向于减少嵌套。

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

实际上,这取决于站点/应用程序的细节。 这个站点恰好在相当适中的硬件上运行MVC。 PHP下的类似站点可能会自行承担费用。 其他要考虑的事情。 IIS,Apache,LightHTTPD等。老实说,php与asp.net的关系远不止原始性能差异。 PHP不能很好地适合大型,复杂的应用程序,就像asp.net mvc一样,它是如此简单...它本身与VS + SCC有更多关系。

需要注意的是,问题是.NET MVC与PHP,而不是.NET(Web窗体)与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更快”,那么我们今天在这里所说的话将是正确的。

再见/!

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

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

我很想知道结果……如果您有博客或类似博客,那么世界其他地方也一样(这个问题总是被问到)。

如果您也可以在常规ASP中构建这个简单的小应用程序,那就更好了。 哎呀,如果测试设计得当,我什至会为您支付这些结果。 认真地说-在这里表达您的兴趣,我会给您发送电子邮件。

C ++ ...现在,战斗将在PHP和ASP.NET之间进行。 PHP将在易用性上取胜,ASP.NET将在Windows Server生态系统中的性能上取胜。 许多以php开头的较大的网站都已升级为C ++。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM