在网上论坛,总是有成百上千的文章和帖子在讨论 PHP 和 ASP.NET,究竟谁才是更好的平台?不过很可惜,大部分人的观点总是带有偏见的,人们总会有意无意地推广自己喜欢的语言。
此外,如果你注意过这些争论帖和文章的日期,就会发现大部分的信息都是过时的。太可惜了,这些搜索排名考前的文章提供的信息却不再有效。我们还要考虑到,PHP 和 ASP.NET 都是有周期性的版本升级和优化的。
个人认为,这两种编程语言都可以在非常庞大的 Web 应用和网站上成功使用,因此,它们处理大型网络应用程序的能力是毋庸置疑的。
内容提要:
下面仔细说明每个方面,并且附上见解。
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语句等进行优化,降低代码编写方面对性能和速度的影响。
appDynamics
NewRelic
OneAPM
3.
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 语言。
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 服务器变得更加简单易行。
很可惜,在我看来,微软的服务器在可用性上日渐衰落,服务器管理变得越发笨拙,并且充斥着许多不必要的功能。
很详细的针对PHP和ASP.NET进行对比,帮助大家更好地分析两者的区别,希望对大家进行开发有所帮助。
目前为止,我们的脚本都没有交互。也就是说,它们都不需要用户的输入。本节,我们将学习脚本如何问问题,并获取以及使用其响应。 read 要从键盘读取输入,使用 read 命令。read 命令从键盘读取输入并将其赋值给一个变量。例如: #!/bin/bash echo -n "Enter some text > " read text echo "You entered: $text" 注意 ech
1. zend_class_entry 2. 定义一个类 3. 定义一个接口 4. 类的继承与接口的实现 5. 小结 面向对象的概念这里就不再叙述了。原书中把这一部分的知识分开到PHP4和PHP5中来讲的,这里我做了大幅的调整,几乎是进行了重写。前一部分主要介绍了如何定义类、接口等一些声明类的操作。后一部分主要介绍了对象的使用等一些对实例的操作。
本文向大家介绍对PHP语言认识上需要避免的10大误区,包括了对PHP语言认识上需要避免的10大误区的使用技巧和注意事项,需要的朋友参考一下 PHP是一种非常流行的开源服务器端脚本语言,你在万维网看到的大多数网站都是使用php开发的。但是,你大概很奇怪的注意到有少部分的人发誓要离php远远的。但是令人更奇怪的是或者很震惊的说他们不用php并不是因为一些被证实的语言缺点。他们决定不用php,是因为误解
本文向大家介绍Android实现可点击的幸运大转盘,包括了Android实现可点击的幸运大转盘的使用技巧和注意事项,需要的朋友参考一下 之前的项目有一个幸运大转盘的功能,在网上找了很久,都没有合适的方法。 这是效果图,实现目标:十二星座的图片可点击切换选中效果,根据选择不同的星座,实现不同的 方法。之前网上的都是带有指针的,或者可点击改变效果,但是并不知道选择的到底是哪个,即虚拟选择。 实现该功能
本文向大家介绍ASP.NET对大文件上传的解决方案,包括了ASP.NET对大文件上传的解决方案的使用技巧和注意事项,需要的朋友参考一下 首先,我们需要下载这个名为 RanUpLoad 的组件。 下载完成之后,两个 dll 文件添加到项目的引用中区,xml 文件也要复制在项目中的 bin 文件夹下,也就是最后三个文件都要存在于 bin 文件夹中。 接着,上传控件还是用 ASP.NET 中自带的 Fi
问题内容: 我正在寻找适用于asp.net的JavaScript模态对话框解决方案,jquery UI对话框似乎不错,但是它将对话框容器移至body标签的底部。我将对话框代码更改为将对话框保持为asp.net形式,但仍然超出了updatepanel的范围。 有没有解决方案或更兼容的对话框,它不会破坏asp.net表单的生命周期? 谢谢 问题答案: 为什么不将UpdatePanel放在对话框容器中?