我和一位同事就这一点进行了友好的争论,我个人的观点是,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在这方面的灵活性是一件好事.能够部署脚本而不需要跳转您的服务器,这真是太棒了.把它放进去就行了.非常出色.但归根结底,它的表现不那么出色.

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

Php相关问答推荐

CSV 文件中的可点击 URL 链接格式 用 PHP 下载

make:entity symfony 命令在教义Helper.php 中给出错误

使用关联数组

数字到 Excel 列名的转换

如何在php中使用array_map按单词排序

Xdebug xdebug.mode = 调试不适合我

php数组映射函数

参考:应该使用#[\ReturnTypeWillChange] 属性

为 Mac 安装 ext-zip

如何测试字符串是否包含 PHPUnit 中的另一个字符串?

如何将 Blade 模板视图作为原始 HTML 字符串?

将 POSTMAN 请求转换为 Curl

如何更新使用已弃用 each() 函数的代码?

配置:错误:请重新安装 libzip 发行版

为什么 1...1 判断为 10.1?

警告:遇到非数字值

从缓存中加载 Composer

仅从 Laravel 集合中获取特定属性

在 Ubuntu 上的 php 5.6 上安装 php-zip

为什么标准会话生命周期是 24 分钟(1440 秒)?