【编者按】本文主要针对开源 PHP 和非开源的 ASP.NET 在性能、成本、可扩展性,技术支持和复杂性等方面进行比较。

在网上论坛,总是有成百上千的文章和帖子在讨论 PHP 和 ASP.NET,究竟谁才是更好的平台?不过很可惜,大部分人的观点总是带有偏见的,人们总会有意无意地推广自己喜欢的语言。

此外,如果你注意过这些争论帖和文章的日期,就会发现大部分的信息都是过时的。太可惜了,这些搜索排名考前的文章提供的信息却不再有效。我们还要考虑到,PHP 和 ASP.NET 都是有周期性的版本升级和优化的。

笔者保证,这两种编程语言都可以在非常庞大的 Web 应用和网站上成功使用,因此,它们处理大型网络应用程序的能力是毋庸置疑的。

内容提要:

关于性能:笔者会阐述影响性能的种种因素,其结果会证明因为速度而选择一种编程语言在大多数情况下是毫无意义的。

关于可拓展性:笔者会阐述影响可拓展性的因素,但实际上,只要编程方法正确,两种语言的可拓展性能都十分强大。

关于成本和技术支持:由于 PHP 是开源的,通常运行在 LAMP(即 Linux,Apache,MYSQL 和 PHP)这些开源平台上。因此,在提供最具成本效益的解决方案和提供大量的资源及支持方面,PHP 是优于 ASP.NET 的。

关于平均部署时间(即附加成本):使用 ASP.NET 进行编码需要的代码量是使用 PHP 的两倍,因此使用 PHP 部署时间成本更低,速度更快。

笔者会在下面仔细说明每个方面,并且附上见解。

1.可拓展性和易维护性

无论你选择 PHP 还是 ASP.NET 平台,对可拓展性和易维护性都不会有任何影响。Web 应用程序的可拓展性以及易维护性主要取决于以下几个方面:

  • 编程者的经验
  • 使用最佳的编码实践
  • 使用可靠的编程框架
  • 遵循程序设计指南和标准

2.性能和速度

关于这点,一直以来都存在许多争论,且大部分争论都是不客观且片面的。这些争论并没有给大家提供真正有效的信息,只是极力吹捧一种语言而贬低另一种。

当涉及到测量 Web 应用的速度时,值得考虑的因素非常多。以致于编程语言的运行速度,对当下大部分网站的速度和性能影响,其实是微乎其微的。

然而,如果要用这种语言完成雅虎或者谷歌这类网站每天都在执行的庞大任务,那么选择一种可以快速执行大型任务的编程语言就十分必要了,这也是谷歌和雅虎选择多种编程语言(大部分都是开源的)的原因,每种语言都用来执行最适合它的任务。

下面,笔者会分析各种常见和不常见的场景并且解释哪种任务更优。

第一种常见情况

Web 应用的一种常见的任务是对数据库进行访问和查询,再把结果输出到 Web 服务器,继而浏览器。因此,在这个常见场景中,所有的编程语言都要担当数据库服务器和 Web 服务器之间的通信或者是接口的角色。在此场景中,编程语言的速度对整个进程几乎没有影响;该进程的速度主要取决于数据库服务器、Web 服务器,客户端的 Web 浏览器和带宽。

若是考虑常用的主流数据库服务器,MySQL(现在属于Oracle),PostgreSQL,MSSQL 和 Oracle 都在努力提升速度和性能。我们看到,每个版本的数据库服务器升级都会带来新功能和更好的性能,所以笔者认为只要数据库程序员使用优化的实用的 SQL 查询,并且必要情况下采用如缓存一类的先进功能,上述任一款数据库服务器都会有十分优越的表现。

谷歌,Facebook,YouTube,雅虎和最近因世界杯获得庞大观众数量的 FIFA 都在使用 MYSQL。因此,MySQL 数据库服务器的能力是毋庸置疑的。

基于线上的统计调查,截止至发稿时,PHP 与 MySQL 之间的通信和接口速度要快于 ASP.NET 和 MSSQL,但并不明显。

第二种常见情况

Web 程序的另一种常见任务是访问文件系统,找到一个图像再将其发送到 Web 服务器。在这种情况下,编程语言的任务依然很少,与编程语言交流的负担主要落在操作系统与文件系统身上。

基于线上的统计调查,截止至发稿时,Linux 操作系统和 EXT4(文件系统)的性能优于 Windows 操作系统和 NTFS(文件系统)。

第三种常见情况

大多数的 Linux / Unix 服务器的运行都很简约,没有任何额外的非必需的包或 GUI 界面,因此这些操作系统只需使用很少量的 CPU 和 RAM,从而将更多的资源留给数据库和 Web 服务器。

大多数 Windows 服务器运行十分笨重,有许多冗余的包会占用大量的 CPU 和 RAM。

很显然,LAMP 平台要比 ASP.NET 平台更有优势,因为它有更多的可用资源。

第四种 不太常见的情况

ASP.NET 通常使用 C# 编写。一般而言,截止到目前为止,C# 是比 PHP 更快的编程语言。(但这种情况也可能改变,因为编程语言会为了提高速度而不断升级更新)因此,假设为了完成某次计算需要执行2,000,000次循环,那么用 C# 编写的 ASP.NET 程序将比 PHP 程序运行更快。然而,这是一种非常罕见的情况,一次计算循环次数最多为几百次,而不是2,000,000次。而且,在这种情况下,就应该考虑为什么要做一个2,000,000次的循环计算。

其他与编程语言无关,但会对性能产生影响的因素还包括:

  • 程序员在编写代码时的知识储备和能力
  • 程序员在编写 SQL 查询语句时的知识储备和能力
  • 所需实现的功能(有些功能在 ASP.NET 平台所需的执行时间长于在 PHP 平台所需的时间,有些则恰巧相反)

说到性能,在此不得不谈及一些专业的应用性能监控工具。可以有效的针对代码、SQL语句等进行优化,降低代码编写方面对性能和速度的影响。

appDynamics

NewRelic

OneAPM


图为OneAPM上监控到的 .NET 应用程序响应时间和吞吐量数据

3.成本

PHP,MySQL 服务器,PostgreSQL 服务器,Apache 服务器和 Linux 操作系统的使用和升级都是免费的。此外,另设一台备援主机,或者需要运行多个服务器以均衡负载或搭建服务器集群,也都没有额外的许可费用。

LAMP (Linux, Apache, MySQL 和 PHP)在托管公司中也更受欢迎。与 Windows 主机相比,LAMP 主机的普及性使得每月的托管费用更低。

如果你购买了 Windows 操作系统,那么 ASP.NET 和 IIS 就是免费的。微软的 Windows 服务器,SQL 服务器以及未来的更新价格昂贵。例如 Microsoft Server 2008 R2 64位标准版价格在1029美元左右,而针对小型企业的 Microsoft SQL Server 2008价格在1038美元上下。

如果这个网站变得受欢迎,有必要另设一台备援主机,或者需要运行多个服务器以负载均衡,搭建服务器集群,那么上述费用将会大幅度提高。

4.支持和资源

由于 LAMP 是开源的,世界各地专业且友好的开发者们一直在对这一开源平台的更新和改进提供源源不断的支持。除此之外,PHP 和 LAMP 平台还有很多其他的资源支持和开发者支持。

我之所以提及“友好”这个词,是因为向开源社区做出贡献的开发者们并不是为了得到经济利益。如果你在编码过程中遇到了功能挑战需要寻求帮助,去 PHP 的论坛上提问,你一定会收到友好的程序员们给出的有用信息。

ASP.NET 更依赖于微软数量有限的开发者做出的改进和更新。能帮助解决 ASP.NET 的贡献者相对较少。

5.部署时间

与 PHP 相比,ASP.NET 需要大量或者说更多行的代码去完成复杂的特性和功能,在开发过程中花费更多的时间。

此外,PHP 是在服务器端被编译的,因此,当改变功能时,无需额外步骤就能看到改变。相反的是,ASP.NET 的代码每次修改都需要进行编译。也就是说,开发过程中 ASP.NET 要比 PHP 消耗更多的时间。

6.编译器和工具

PHP 和 MySQL 都有独立编译器的,PHP 的开发者可以获得数量更丰富的编译器。

大多数 ASP.NET 程序员都依赖于 Microsoft Visual Studio 编译器开发 .NET程序。(许多 ASP.NET 程序员对 Microsoft Visual Studio 是又爱又恨)

这是完全不同的编程风格——使用 PHP 的程序员及开源开发者们更喜爱文本编辑器,例如 VI,VIM,Notepad ++。

VI 和 VIM 是非常高级的独立编辑器。开发者完全掌握这些编辑器的性能后,可以快速、高效且独立地进行复杂的编程。因此,他们能更加灵活地控制代码。当涉及到使用或与 JavaScript,Ajax,JQuery 等平台集成时,由于熟悉开源环境且使用 VI 或 VIM 手打代码,PHP 开发者往往更有优势。

7.平台独立性

PHP 具有平台独立性,可以在 Linux,Unix,Mac OS X,Windows 中的任何平台运行。ASP.NET 则只能在 Windows 平台上运行。

8.热门网站都运行在什么平台上?

下面的表格列出了当下流行站点所使用的平台和语言。
Note: Please don't confuse C with C# (pronounced C Sharp) — they are completely different programming languages. ASP.net is mostly programmed in C# (C Sharp) or Visual Basic and not C.
注:请勿混淆 C 与 C#,他们是两种完全不同的编程语言。ASP.NET 通常使用 C# 或者 Visual Basic 进行编程,而非 C 语言。

站点 建立时间 服务器平台 编程语言
Google.com November 1998 Linux C, Java, C++, PHP & MySQL
Facebook.com February 2004 Linux PHP, MySQL and C++
YouTube.com February 2005 Linux C, Java and MySQL
Yahoo.com August 1995 Linux C++, C, Java, PHP & MySQL
MSN.com (owned by Microsoft) August 1995 Windows ASP.net
Live.com (owned by Microsoft) August 2008 Windows ASP.net
Wikipedia January 2001 Linux PHP & MySQL
Amazon.com October 1995 Linux & Solaris C++, Java, J2EE
WordPress.com November 2005 Linux PHP & MySQL

9.流行程度

LAMP 平台要比 Windows 平台更加流行。基于 Netcraft 2010年7月针对205,714,253个 Web 服务器进行的数据调研显示,有112,945,968(54.90%)的 Web 服务器托管在 Apache 上,有53,217,620(25.87%)的 Web 服务器托管在 Windows 上,剩余的则托管在其他平台上。

10.可用性和易部署性

关于 Linux 的不友善误传已久。

实际上,这取决于使用者的平台搭建经验和知识储备程度。

但不得不说,时下流行的改进后的 Linux 发行版给笔者留下了深刻的印象。诸如 Ubuntu,小红帽,CentOS,openSUSE 以及 Fedora 等发行版,不仅易于安装部署,还提供简单直接的 GUI 界面,使得配置 Linux 服务器变得更加简单易行。

很可惜,在笔者看来,微软的服务器在可用性上日渐衰落,服务器管理变得越发笨拙,并且充斥着许多不必要的功能。

原文地址:http://www.comentum.com/php-vs-asp.net-comparison.html

盘点 PHP 和 ASP.NET 的10大对比!的更多相关文章

  1. 构建ASP.NET网站十大必备工具

    最近使用ASP.NET为公司构建了一个简单的公共网站(该网站的地址:http://superexpert.com/).在这个过程中,我们使用了数量很多的免费工具,如果把构建ASP.NET网站的必备工具 ...

  2. Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目

    Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...

  3. 【ASP.NET实战教程】ASP.NET实战教程大集合,各种项目实战集合

    [ASP.NET实战教程]ASP.NET实战教程大集合,各种项目实战集合,希望大家可以好好学习教程中,有的比较老了,但是一直很经典!!!!论坛中很多小伙伴说.net没有实战教程学习,所以小编连夜搜集整 ...

  4. iOS开发人员不容错过的10大工具

    内容简介 1.iOS简介 2.iOS开发十大实用工具之开发环境 3.iOS开发十大实用工具之图标设计 4.iOS开发十大实用工具之原型设计 5.iOS开发十大实用工具之演示工具 6.iOS开发十大实用 ...

  5. 10大经典CSS3菜单应用欣赏

    很多时候,我们的网页菜单需要个性化,从而来适应各种行业的用户视觉操作体验.本文将带领大家一起来欣赏10个非常经典的CSS3菜单应用,菜单涉及到动画菜单.Tab菜单.面包屑菜单等. 1.CSS3飘带状3 ...

  6. 高校应该使用 Drupal 的10大理由

    使用 Drupal 已经成为全球顶尖高校中的一种潮流,它已经被全球数以百计的院校选择并应用,无论是哈佛.斯坦福.杜克.布朗.罗格斯.剑桥.耶鲁还是其它众多知名高校,都已经选择 Drupal 作为它们理 ...

  7. 人们对Python在企业级开发中的10大误解

    From : 人们对Python在企业级开发中的10大误解 在PayPal的编程文化中存在着大量的语言多元化.除了长期流行的C++和Java,越来越多的团队选择JavaScript和Scala,Bra ...

  8. 10大iOS开发者最喜爱的类库

    该10大iOS开发者最喜爱的库由“iOS辅导团队”成员Marcelo Fabri组织投票选举而得,参与者包括开发者团队,iOS辅导团队以及行业嘉宾.每个团队都要根据以下规则选出五个最好的库:1)不能投 ...

  9. 数据挖掘10大算法(1)——PageRank

    1. 前言 这系列的文章主要讲述2006年评出的数据挖掘10大算法(见图1).文章的重点将偏向于算法的来源以及算法的主要思想,不涉及具体的实现.如果发现文中有错,希望各位指出来,一起讨论. 图1 来自 ...

随机推荐

  1. 运用json-lib生成特定json

    在实现接口过程中,一般协议都是定义数据格式为json.我们有时候需要把bean转换为JSON输出给接口调用者,但是可能存在bean中的字段有些不是接口定义所需要的.这个时候需要我们对JSON转换是需要 ...

  2. How to: cgminer (Bitcoin, Litecoin etc.) + AMD Radeon driver install on CentOS

    UPDATE 7/7/13: If you want to use Catalyst drivers version 12.8 you will find that X won’t start (er ...

  3. keystone系列二:keystone源码分析

    六 keystone架构 6.1 Keystone API Keystone API与Openstack其他服务的API类似,也是基于ReSTFul HTTP实现的. Keystone API划分为A ...

  4. java中判断Object对象类型

    记录一下 Object param = params.get(i); if (param instanceof Integer) { int value = ((Integer) param).int ...

  5. 百度编辑器1.4.3 .net版在vs2008的使用方法

    由于在官方下载的ueditor包是在vs2012下开发的,可以在vs2010中使用,但在vs2008中就会报错.折腾了一翻,现将解决方法分享给需要的朋友,其实就是把里面包含.net4.0的元素换成.n ...

  6. 理解C#中的继承

    继承 1.创建子类对象的时候,在子类对象中会为子类对象的字段开辟空间,也会为父类对象的所有字段开辟空间.只不过父类私有的成员访问不到而已. 2.base关键字可以调用父类的非私有成员. 3.子类的访问 ...

  7. JS中的replace方法以及与正则表达式的结合应用

    replace方法的语法是:stringobj.replace(rgexp, replacetext) 其中stringobj是字符串(string),reexp可以是正则表达式对象(regexp)也 ...

  8. 周末充电之WPF(三 ) .后台动态生成控件

    布局 -连连看: 代码: private void Window_Loaded_1(object sender, RoutedEventArgs e) { //动态创建行 ; i < ; i++ ...

  9. (二)Hibernate4 CRUD 体验

    所有的学习我们必须先搭建好hibernate的环境(1.导入对应的jar包,2.hibernate.cfg.xml,3.XXXX.hbm.xml) 第一节:HibernateUtil 封装 导入对应的 ...

  10. swift变量交换赋值

    重点在& func jiaohuan(inout a: Int,inout b: Int) { let temp = a a = b b = temp } jiaohuan(&aa,b ...