我和一位同事就这一点进行了友好的争论,我个人的观点是,ASP.NET-MVC编译的Web应用程序比用PHP编写的同一项目运行起来更高效/更快.我的朋友不同意.

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

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

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

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

(I realize for some of you this may very well be an irrelevant and maybe stupid argument, but it is an argument, and I would still like to hear the answers of the fine people here at S.O.)

推荐答案

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

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

多年来,已经进行了各种优化来提高性能,例如,最显著的是使用APC进行操作码缓存(以至于APC将成为PHP6的标准部分,而不像现在那样是一个可选模块).

但PHP脚本基本上是暂时的.会话信息(通常)基于文件且相互排斥(Session_start()会阻止其他脚本访问同一用户会话,直到Session_commit()或脚本完成),而ASP.网除了会话数据,在ASP中,让对象位于应用程序上下文中是相当容易的(也是正常的).NET(或者Java,ASP.NET更类似于Java).

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

作为字节码解释平台,ASP.NET理论上速度更快,但PHP所能做的限制如此之高,以至于与大多数人无关.例如,互联网上访问量最高的20个网站中有4个是PHP.开发速度、健壮性、运行环境的成本等等...当你开始zoom 时,它往往比任何理论速度差都重要得多.

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

还应该指出的是,ASP.NET是预编译的,而php是在飞翔(不包括操作码缓存)上解释的,这可能会有所不同,但php在这方面的灵活性是一件好事.能够部署脚本而不需要跳转您的服务器,这真是太棒了.把它放进go 就行了.非常出色.但归根结底,它的表现不那么出色.

尽管我认为你在争论什么是真正不相关的细节.

Php相关问答推荐

419注册期间Laravel 11中的错误

PHP cUrl扩展与v8.2.12更新损坏

无法使用DOMPDF在PDF中呈现非ANSI字符

我需要多个SELECT语句的结果(使用由php ECHO创建的表中显示的Limit(X)

如何让PHP变量跨越多个脚本调用?

如何在不指定symfony列的情况下从数据库中获取行数组

根据产品类型显示或隐藏WooCommerce管理产品自定义字段

使用列入黑名单的单词和自定义业务逻辑的组合将特定的子字符串包装在HTML标记中

将一个情态形式放在细丝v3中的形式中间

从目录文件夹中获取文件并追加到 Select 下拉列表(选项)-wordpress/wc

如何在laravel中添加延迟?

Laravel Http::get not working on controller

Woocommerce 中为空时隐藏显示变体自定义字段数据

加载 Xdebug PHP 7.4.0 失败

使用其ID查询和捕获与订单相关的其他详细信息的shopware 6方法

在 Symfony 测试中何时使用 TestCase 而不是 KernelTestCase

Laravel 8:会话不适用

每个发布请求 Laravel 9 的 CSRF 令牌不匹配

列表不在 GROUP BY 子句中并且包含 X2CRM 中的非聚合列

在 EasyAdmin 中添加全局操作,将我的按钮放在表格下方而不是上方