关于php cgi 和asp的速度比较一直是一个争议的问题
本人初入门是从perl开始的,后来学习了asp和php因为编程语言的简单,一段时间曾经迷上php。
后来用多了,便发觉这些语言各有优缺点。
我个人编程使用语言主要视乎程序的类型
(其中由于对php和perl较为熟悉,因此采用较多)
下面是我对asp,php,和perl使用的心得。
1.调试速度的比较:
其实,一般的cgi程序,这3种语言的速度比较是不明显的,这里面常常会有误区,很多人采用不同的程序进行比较,但是由于这些程序结构和篇写人员的水平不一样。
往往程序速度的区别是由程序结构本身而非语言区别产生的。
我曾经在本地些个一个留言本,分别用3种语言比较(文本格式),结果发现本地执行的速度没有什么区别(win98上)但是,如果写一个不断刷新的聊天室,在win98+iis上,明显asp快点(因为asp与iis)是集成的,而且是线程,而cgi和php 都属于外部调用的cgi,显然,繁忙的多人的http请求时,asp占优(iis服务器)。
另外测试文本格式的论坛程序,发现三种程序的处理速度区别不大,而当使用数据库的贴子数量很多的论坛的时后(同样在win98上)
使用IIS+cgi+mysql IIS+php+mysql的速度都不比IIS+asp+access慢,而使用apache+cgi+mysql要比iis+cgi+mysql快,可见这里主要的区别
与数据库类型和web服务器有关系。
而当一些人用一个IIS+ASP+ODBC(数据库)与IIS+CGI+文本 比较一个多贴论坛时,就断定asp比cgi或php快显然是不严谨的。
另外一点,对于小型程序,不管那种语言一般运行的时间0.5秒左右,而从远端服务器下载一个网页就要10多秒左右,显然这种速度是相差很远的。
个人总结:在NT上编写例如聊天室,新闻等网页刷新率高的程序时,asp比较理想,而象论坛,搜索这类程序使用asp和cgi和php都可以选择(asp使用方便,而php.CGI可以获得较高稳定性)
个人心得:在NT上使用apache+mysql+php的效果要比iis+mysql+php好的多。
个人经验:提高效率的根本方法不是语言的选择,而是于平台的搭建,程序语言的结构和网页html代码的优化。
一个被大家忽视的问题是臃肿的html代码比程序更影响速度!!!!
举个例子,就拿这个论坛,大家有没有发现,发别贴子的速度很快而文章列表的速度较慢,大家可能以为是搜索数据库慢的原因,其实不然,当大家看到广告条出现的时候,
程序已经执行完成,而剩下的时间都是下载html网页的时间(因为有大量的表格,因此影响浏览速度,浏览器在/table出现后才出表格)。
2.语言的性能:
如果说程序的编程应用能力,显然php和asp与perl不在一个档次,perl的数组功能,字符处理功能,能领众多难题轻松解决,尤其perl的应用模块更是举不性数,为编程带来方便(不过,很多人没有使用这些模块的条件)。
perl在某些字符处理能力方面比语言老大C/C++还出色,这也是perl在互联网应用广的原因。
对于php其实就象一个集成块语言,不很多元件集成一起,因此,虽然它的模块很小,但很多web功能集成在语言里,因此很多功能用很小的语句就能实现,因为语言简练,特别析合初学者使用,当是一些高级性能,和系统结合的性能不及perl,比asp也逊色。
但是使用他编写程序,一定能节省你很多时间。
对于asp,因为其商业原因,制约了很多性能,很多组件都要收费,源代码保密,显然没有上述语言的大度,同时局限面仅仅是windows。
个人心得: 要想提高你的web编程思维和总体水平一定要学习perl.初学者php是不错的选择。
3.资源性能。
本人作了cgi和php的比较,cgi采用进程,php采用模块cgi程序瞬间执行的CUP比php大,但执行完成以后马上退出CUP和内存(时间一般为0.0X秒) 而php则要占用好长一段时间(大概数分钟),另外cgi占用的内存比PHP小。
因此对于浏览量不选很大的程序(10万次/日)以下的程序用进程CGI比PHP更能节省服务器资源而频繁执行的程序(10万次/日)以上会节省cup资源,如果把CGI编译到apache模块时,CGI比php能节省更多的内存(注意:以上在两种语言都使用数据库程序的前提下的比较)。
而在linux上使用cgi+dbi连接mysql,与php连接mysql的时间区别不是很大。
关于unix与NT性能的比较就不用说多说了(一个是高端产品,一个是普及产品),不在一个档次,
但是如果从普及面和入门来说,NT要占优
本人结论,程序是否占资源,最主要的原因与程序结构有关系,对于信息量大的程序,能够用数据库写时尽量用数据库。
当有数据检索时,用数据库优于dbm,用dbm优于文本。
而没有多条数据检索时正好相反,打开文本文件的速度要比连接数据库块。