我日常工作使用的是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的使用者大都是周一到周五工作的上班族。
我们看长期比较,对PHP的搜索呈下降趋势,怎么会这样呢?我想不明白,PHP依然是这世界上应用最广的网络编程语言,最近Facebook的开发者发布了HipHop,将大大提高PHP应用的性能,也许运行速度可以比ASP.NET还要快。
相关文章:
分享到: 开心网 豆瓣网 人人网 Google书签 Del.icio.us
反向链接(Trackback URL)
2010年2月11日, 星期四 10:45:51
个人认为,无论从哪方面看,PHP都是王道。
[回复]
巴别塔上的雇工(Morgan Cheng) 回复:
2010年2月11日, 星期四 at 10:58:29
“王道”作何解?
PHP有他的优点,但是这是一个多样性的世界,它不至于在任何方面都是王吧:)
[回复]
阳光不锈 回复:
2010年2月11日, 星期四 at 13:52:11
就目前而言,国际而言,PHP是绝对主流,国内全是win盗版,所以……asp 。net之类的横行。
[回复]
巴别塔上的雇工(Morgan Cheng) 回复:
2010年2月11日, 星期四 at 18:04:52
真的吗?国内大部分网站都是ASP.NET做的?
我没有统计数据,但是我想在Server端我国应该和世界差别不大啊。
[回复]
阳光不锈 回复:
2010年2月11日, 星期四 at 19:36:04
从绝对数量上讲,WIN的服务器占多数,大部分站长是管理不了LAMP的,GUI的WIN OS他们才看得懂。
不过高质量的网站,大部分还是PHP的服务器。
[回复]
2010年2月11日, 星期四 14:55:37
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) 回复:
2010年2月11日, 星期四 at 14:57:22
缩写太多,看不大懂:)
fp、dm都是什么意思?
[回复]
诚三 回复:
2010年2月20日, 星期六 at 10:16:28
fp frontpage
dm dreamweaver
其实也就是一点感慨而已,没写什么。现在不用php asp.net,所以喜欢php多一些。
[回复]
2010年3月18日, 星期四 14:23:02
[...] 之前比较PHP和ASP.NET的时候,提到了Share-Nothing-Architecture,这是PHP创始人Rasmus Lerdorf提出的概念。PHP采用的就是Share Nothing Architecture,各个HTTP请求之间在PHP这个层次是不共享任何状态的,这样的好处是可以使得PHP应用程序具有很高的扩容性(Scalability)。 [...]