PHP vs ASP.NET

发表于2010年2月6日, 星期六此文属于 技术体会

我日常工作使用的是ASP.NET,前一段想学习了解一下其他的网络应用开发技术,本可以选择热门的Ruby on Rails或者Python,但是无奈精力有限,想都学是不可能的,而我的博客建在WordPress上,WordPress是用PHP写的,所以还是选择多花些时间了解PHP。

PHP和ASP.NET最大最本质的区别,就是PHP只是一门编程语言,而ASP.NET是一个平台。

这世界上大约1/3的网站的应用程序是用PHP写的,这些PHP程序又大部分运行在Apache上,作为一门语言,PHP并不是必须运行在Apache上,PHP是独立于运行平台的,它也可以在IIS里运行。与PHP相反,ASP.NET是一个平台而不是语言,ASP.NET的程序可以用C#写,也可以用VB.NET写,可以用任何能够编译成在.NET CLR上运行的的编程语言来写,ASP.NET通常运行在Windows+IIS上,但是也可以运行在其他Web Server比如Apache上

从这个意义上说,PHP和ASP.NET的区别,就好比是iPhone和Windows 7的区别,不是一样的东西,但是你选择了其中一个,就等于选择一种风格。

但是作为开发网络应用的工具,就我的体会,在功能上还有两个显著区别。

Share-Nothing Architecture

PHP的哲学是Share-Nothing Architecture,每次对HTTP请求的处理都是独立的,不共享任何数据,如果真的需要共享的话,那也是通过文件系统或者数据库,在PHP的运行空间中不会共享内存对象。这篇关于Share-Nothing Architecture的文章非常详细地介绍了Share-Nothing Architecture,这种架构能够带来更好的扩展性(Scalability)和可维护性(Maintainablity)。

使用ASP.NET一样可以实现Share-Nothing Architecture,问题是,ASP.NET一族的编程语言特性让打破Share-Nothing Architecture太容易了。比如,C#语言中的static变量,如果使用的话,同一AppDomain的每个HTTP请求都Share同一数据,这样就不是Share-Nothing了。

Asynchronous Programming Model

ASP.NET有一个功能是PHP不具有的,Asynchronous Programming Model(APM),异步编程模型,这一模型可以更有效地利用线程,提高Scalaibility,当然,写异步的程序要比写同步的程序困难得多。

PHP没有ASP.NET一样的Asynchronous Programming Model,为什么在这一方面PHP世界居然逊于微软技术呢?

我看可从两方面回答,第一,微软支持APM是因为它能够支持,第二,是因为微软必须支持。

为了支持APM,必须要有底层支持,ASP.NET作为一个平台,可以利用微软的IO Completion Port来实现真正的异步。但是像PHP这样的编程语言,只是编程语言,不能够假设自己运行在一个支持异步端口的平台上,所以决定语言不会添加APM功能。

为什么又说微软必须支持APM呢?Windows上进程的代价很大,线程的代价好一点,但是依然很大,所以要有效地使用线程,就必须创造出APM这样的东西。相比之下,Linux上进程线程的代价要小得多,这样创造APM的压力也就小得多,不用APM一样可以保持高效。

Trends

这篇文章标题是”PHP vs ASP.NET”,我们用Google Trends来看看二者的比较。看短期对PHP和ASP.NET的关注程度,有意思,每到周末,对这两个关键词的搜索就少,可见PHP和ASP.NET的使用者大都是周一到周五工作的上班族。

image

我们看长期比较,对PHP的搜索呈下降趋势,怎么会这样呢?我想不明白,PHP依然是这世界上应用最广的网络编程语言,最近Facebook的开发者发布了HipHop,将大大提高PHP应用的性能,也许运行速度可以比ASP.NET还要快。

image

相关文章:

  1. 再谈Share-Nothing体系结构
  2. 世博会
  3. 开始一个项目时最重要的是什么?
  4. 提高WordPress性能:慎用插件
  5. 你的浏览器能能同时保持对一个域名的多少连接?

分享到: 开心网 豆瓣网 人人网 Google书签 Del.icio.us

 

本文已有9条评论

  1. 阳光不锈说:

    个人认为,无论从哪方面看,PHP都是王道。

    [回复]

    巴别塔上的雇工(Morgan Cheng) 回复:

    “王道”作何解?
    PHP有他的优点,但是这是一个多样性的世界,它不至于在任何方面都是王吧:)

    [回复]

    阳光不锈 回复:

    就目前而言,国际而言,PHP是绝对主流,国内全是win盗版,所以……asp 。net之类的横行。

    [回复]

    巴别塔上的雇工(Morgan Cheng) 回复:

    真的吗?国内大部分网站都是ASP.NET做的?
    我没有统计数据,但是我想在Server端我国应该和世界差别不大啊。

    [回复]

    阳光不锈 回复:

    从绝对数量上讲,WIN的服务器占多数,大部分站长是管理不了LAMP的,GUI的WIN OS他们才看得懂。
    不过高质量的网站,大部分还是PHP的服务器。

    [回复]

  2. 诚三说:

    php是语言,asp.net是平台,说法确实没错——这里的“平台”与作者下文的平台,不是一个概念。其实更可以把asp.net看作.net的综合web应用。
    asp.net的异步功能也是依赖windows的产物。对企业来说,ms方案可以更赚钱,所以对雇工来说,asp.net就是好的职业优势。
    ——但是php确实不错。
    正如同fp和dm,如果ms坚持发展fp,fp就是html asp ap.net的ide,dm只是html的编写工具。雇工就无所谓是否喜欢fp总是要用的。
    瘦客户端(包括os)的趋势越来愈明显,php不一定会将来大行其道,asp家族不一定会没落。作者抬头看看远处风景总是很好的,支持你。

    [回复]

    巴别塔上的雇工(Morgan Cheng) 回复:

    缩写太多,看不大懂:)
    fp、dm都是什么意思?

    [回复]

    诚三 回复:

    fp frontpage
    dm dreamweaver
    其实也就是一点感慨而已,没写什么。现在不用php asp.net,所以喜欢php多一些。

    [回复]

  3. 再谈Share-Nothing体系结构 | 巴别塔上的雇工说:

    [...] 之前比较PHP和ASP.NET的时候,提到了Share-Nothing-Architecture,这是PHP创始人Rasmus Lerdorf提出的概念。PHP采用的就是Share Nothing Architecture,各个HTTP请求之间在PHP这个层次是不共享任何状态的,这样的好处是可以使得PHP应用程序具有很高的扩容性(Scalability)。 [...]

我来评论两句