精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● CGI>>未来展望>>推荐:《WEB应用技术浅谈:ASP、CGI、Perl、PHP及Socket》

主题:推荐:《WEB应用技术浅谈:ASP、CGI、Perl、PHP及Socket》
发信人: tanshuai(天水-S.TS)
整理人: workingnow(2002-09-30 12:06:47), 站内信件
  近日见有人为“ASP和CGI哪个更好”口水不断。时至今日,从ASP与CGI到PHP与Perl的争论一直不休。
  近日小生撰写一篇文章,阐述个人观点,希望大家踊跃讨论。小生不才,只能在所知范围内发表评论。但是总的来说,我认为以网络编程为主的程序设计语言,当之无愧应该是Perl为最佳。因为Perl能做PHP和ASP所能做的事情,更能做它们所不能做的事情。
  嗯,欢迎大家广为传播~!
    WEB应用技术浅谈:ASP、CGI、Perl、PHP及Socket
            作者:Sam Tanshuai——天水

  当今Web编程已经非常热门,Web程序好处多多:
    编写容易:Web拥有强大的HTML支持,可以输出多种图形界面,易于使用,然而普通的GUI编程不但复杂,而且功能有限。
    防止倒版:Web应用的最大好处是防止倒版,目前倒版软件猖獗,随意使用,而无法防止,而Web编程就抵御这个软件弱点,这也是我涉入Web编程的重要之处。
    兼容性好:Web应用只需要客户拥有一个浏览器软件即可,这样在几乎任何操作系统上都可以使用。
    安全性高:一般情况下Web应用都会数据保留在服务器端,从而达到无法篡改的目的。
    分布运算:Web应用除了本身的服务器端运算,亦可借助客户端程序语言进行协助运算,例如:PerlScript、JavaScript和Java 小应用程序,以及ActiveX控件(包括Flash)。
Web已经是网络应用的重要部分,它已经成为某些人的日常需求,未来前景一片光明。那么选择一个良好的Web程序设计语言尤为重要。这里指的程序设计语言是Web服务器端(Server Side)的程序设计。Web应用编程非常容易混淆,例如ASP和CGI,它们两个随有类似,但也有不同之处。在这里我们不能说ASP是编程语言,因为ASP是一个介质;同样CGI亦不是一个编程语言,它只是一个标准,就好像移动通讯,有最初的模拟网和现在的GMS数字网,和未来的CDMA。
  我经常在论坛上和一些文章中来评比ASP、CGI、PHP哪个更好?一般情况大家不以为然,不过在现实中,这就是一个严重的错误,ASP、CGI和PHP能够比吗?大家可以到很多著名国外网站上看,没有文章比这些的。
  ASP、PHP即服务器端HTML可嵌入式编程技术或语言。CGI和Socket是编程技术接口。Perl是程序设计语言。
  下面我就介绍一下各种技术和语言概念。

ASP —— Active Server Page 动态服务器端页技术

  ASP是一个特殊的服务器端Web编程介质,也可以说是最成功的可嵌入式HTML应用,我们可以把它看作是API的产物。它与CGI不同,CGI是接口(Interface)。我个人认为它就实在SSI的基础上设计的。主要由微软IIS服务器进行解析。
  ASP不是一语言,主要写ASP的语言就是VBScript,VBScript被写入ASP页中后,由服务器解析,服务器使用的API方式的,所以比我们一般认为的CGI的确快。VBScript可以调用ASP的很多特性。然而除了VBScript之外,写ASP的人一定也熟悉JScript。但是大家常常忽视了Perl,PerlScript在ASP程序员中一定很少有人知道,因为大家常常认为Perl是CGI,甚至经常那ASP和Perl比,是在荒谬。Perl亦可写ASP,而且Perl在写ASP的能力绝不亚于VBScript。
  ASP有很多好的特性,它和微软的其它技术结合的相当完美。然而ASP的移植性实在令人堪忧,目前全球的Web服务器使用最多的即是Apache,还有一大堆的其他服务器,都不支持ASP。

CGI —— Common Gateway Interface  公共网关接口

  CGI是最古老的Web编程技术,它与ASP等不同的是,它采用接口方式,而非可嵌入式。CGI的好处是灵活性强,兼容性高。但问题在于普通模式运行的使用将会比其它技术慢。当然可以利用FCGI和一些Web服务器的API进行解决。
  CGI可以在任何服务器和操作系统上实现,任何程序语言都可以编写CGI。CGI属于底层操作,远不及ASP、JSP和PHP容易。因为ASP等都提供良好的运作环境,底层操作对于它们而言是不必要的。如果我们把CGI比做机器语言,那么ASP等就是汇编语言了。
  但是由于CGI的底层操作,可以为大型系统创作之所用。CGI本身是一个接口技术,也就说编写的程序可以任何功用。比如说编写一个电子邮件客户端程序,里面包括了很多功能函数,例如收发邮件、编码解码、地址本和过滤器等。开始是在80年代写的,哪个时候是命令行操作(现在的UNIX-Base系统都还有这样的程序,例如sendmail);到了90年代,兴起GUI窗口界面,然后又赶紧加写了一个GUI 界面,就好像Outlook一样,然而以前的那些函数就不需要从写,写的这个GUI界面程序的速度就会快很多;到了现代,Web流行起来,WebMail层出不穷,这个时候程序只需要在原来的命令行模式上按照CGI 标准,稍作修改亦可继续使用。从中我们可以看到命令行模式也好、GUI界面也罢都是一种方法,即:接口。如果通过ASP或者是PHP编写,那么可重用性大打折扣,当然我刚才所说的那个程序可以是C类语言,也可以是Java或者Perl。
  编写CGI的方法,就是使用程序语言(Programming Language)。这样写出来程序的应用用途就广泛很多。因为CGI不需要把程序设计方法打乱,继续语言沿用。
  当然了ASP等可嵌入式语言的成功之处除了速度上的优势(其实也没有什么),还有一个就是对HTML操作非常容易。把代码放在HTML里面写,的确处理HTML就容易很多。我们拿C举例,一般printf()一个完整的HTML代码非常辛苦,还要操作变量等。C程序一般使用SSI 可以解决这个问题,但是效果不好。也有解决方法,就是用C编写一个HTML模版处理函数,就可以容易操作。Perl在CGI领域中一直是最佳语言的原因就是它对HTML处理甚好。它除了在print()方面的优势外,更拥有可嵌入式的变量方法,而且可以非常容易写的处理模版。Perl处理模版的效果远高于可嵌入式HTML。

PHP ——Server-side, Cross-platform, HTML embedded scripting language 服务器端HTML可嵌入式脚本语言。

  PHP 是一个类似ASP编程方法。但是不同的是,ASP是一种技术实现,而PHP则是一种语言,然而它又不同于VB和Perl,因为它还不是一个程序设计语言。在PHP的字面上的意思更为贴切:“HTML服务端语言”,也就是我们可以理解为服务器端的“HTML”语言,客户端的HTML语言是浏览器解析,这个就是由服务器端来解析的“HTML”。所以我认为使用PHP写Web应用的人,不能称之为程序员(Programmer)或者是软件工程师。PHP问题在于只能写Web应用,而且不能脱离Web服务器(当然这不是绝对的,这是一个概念问题)。在国外,更多的认为PHP是一种新型的CGI网络程序编写语言,所以他们在写一些对比文章的时候就不会说 CGI 和 PHP那个更适合你?而是Perl、Python与PHP哪个更适合你? 经常有人在说PHP比CGI好,真是令人感到可悲。因为严格的说PHP是CGI技术中的一个编写语言。我们要注意一点“PHP是一种新型的CGI网络程序编写语言”中的“CGI网络程序编写语言”。我们知道PERL叱咤CGI十多年,从来没有人说PERL是CGI网络程序编写语言。亦说明PHP只能够写WEB应用,而无法完成其它方面的应用。诸如,你不会拿PHP写一个SHELL或者一个GUI程序。从中我们看到PHP只是针对HTML。
  PHP不能用于为大中型应用设计。因为一个大中型的应用,除了Web操作还包含很多其它方面的操作。除非你使用一些解决方案,来进行多语言编程。诸如采取一些类似PRC协议,进行程序间协调。在这里你就必须懂得多种语言,至少除了PHP以外的一种,例如C。那么倒不如整个应用全部使用C。
  这也是为什么,Perl在Unix-Base系统安装时就有,而PHP则需要另外加装。


Perl 

  Perl是迄今为止功能最强、兼容性最好的脚本程序设计语言。Perl至今用于各个领域,Perl在编程届被誉为“瑞士军刀”,它预装在各种Unix系统上。我们平时在使用很多工具软件,例如文本编辑器、计算器等。然而当我们需要其它功能,而无法找到类似程序的时候,就需要动手自己编写。但是诸如C/C++、Java等语言,相对复杂,写这些应用绰绰有余,所以可以利用Perl来快速完成。
  无处不再的Perl,当你下载一个软件代码的时候,时常会发现里面包含诸多Perl文件。例如Apache、MySQL、Sendmail、Mozilla等。有很多C程序设计专家,也经常用Perl编写程序,原因就在于Perl可以在最短的时间内,完成相同的任务。我们可以看到MySQL数据库服务器,在例子中包含的除了C代码就是Perl代码。可见Perl在现实应用中的广泛。有很多人认为PHP操作数据库超级容易,那是因为PHP在发布版本的时候就带了数据库操作函数。然而Perl需要另外下载。因为Perl的模块函数,仅源代码就超过2GB。
  容易使用:Perl的程序语法是标准的,与C和Java等是一样的,容易学习,如果你已经学过类似语言,只需要一天就可以学会啦。兼有C、Shell script、awk、sed的优点。
  功能强大:不仅能开发CGI,它几乎能做您想用计算机语言做的任何事。Perl拥有的模块函数对象是目前编程语言中最多的,在CPAN中你可以找到任何你需要的模块。来快速完成任务。
  CGI设计: Perl在CGI程序设计上无可厚非,拥有强大的HTML字符处理能力,是所有程序语言中HTML模版应用最好的。
        HTML可嵌入式:Perl除了普通的CGI编写之外,还可以编写ASP,以及拥有自己的HTML可嵌入式编程技术,也就是和PHP一样。这是所有语言所不能及的。几乎所有的Web编程应用技术都可以用Perl来完成。然而PHP除了写可嵌入式的,就没有别的了。
        通用GUI界面:Perl有通用的图形窗口界面。所编写的GUI程序可以在所有的操作系统上运作。
        正规表达式:Perl的正规表达式引擎是目前最强大的,可以对字符彻底分析,这也是HTML重要之处。
        至强的语言互动性:你可以用Perl操作C语言函数,也可以在C语言中写Perl代码。你可以用Perl写Java程序,也可以在Java中写Perl代码。你如果是一个Perl程序员,那就发达了,当你寻求一分C或者Java编程工作的时候,不必为你不会或者不精通这些语言而苦恼,大可以站出来,只要你略是小计,就可以把Perl用在C和Java编程上。在此期间,你就可以慢慢学习C和Java,不必等待学有所成后再去,丧失良机。若你是C或者Java程序员,在写程序的时候苦于没有对应函数功能,或者在某些功能要编写很多代码来实现。不必担心,只要你花上一、两天时间学习Perl,在程序中写上Perl代码,调用Perl模块,亦可完成任务。
        可编译:Perl拥有类似Java的字节码编译器,也有C和C#语言翻译编译器。这些都为加密你的Perl程序创造良好空间。当然使用互动语言模式Perl,也不失去为变相的编译方法。在这点PHP和ASP还相差甚远。
        兼容和扩展性:有人说PHP可以用Com,什么的,Perl就不能!这些人根本不了解,Perl能够使用Windows下面的所有用能,例如DCOM、API和OLE。微软公司的新策略 .NET 技术就包括了 Perl.NET 然而PHP这些都被抛之与外。除此之外Perl还支持线程(Thread)等。Apache的扩展模块除了C之外只有Perl能写。
        高速度:除了平常的标准Perl运行模式外,还有FCGI、mod_perl和Perl for ISAPI,都可以把Perl直接置入Web服务器中,速度快与PHP。
        如果你不希望学那么多程序语言,那么你就学Perl好了。因为学会了Perl什么都可以做,何必每天为不同的语言之间的编写烦恼呢?

Socket编程

  Web 编程什么最好?当然就是Socket编程啦。Socket 可不是什么程序设计语言,它是一种技术接口。Socket的好处就是,灵活性最强,几乎可以实现你所有想要达到的Web效果。但是Socket编程比CGI技术很底层。也就是说,你在编程的时候要考虑更多的因素。Socket编程就好比你要编写一个Web服务器,当然这个Web服务器只是一种功能罢了,不是好象Apache那样综合性的。
  Socket编程的步骤:
1、建立服务器端
2、分析请求(Request)
3、应用主体(这里就是真正的Web应用了)
4、返回结果
5、关闭连接
  看起来似乎只是多了2个步骤,其实不然。这里的请求分析和返回结果都需要特殊处理。你除了要做再CGI中的解码,还要做数据分析。因为它在请求中包括了客户端浏览器的一些参数,你必须把它分开来,而以往则是由Web服务器自动分排到环境变量中。返回结果你除了要返回HTML主体,还要放会标头,如时间、类型等其它参数。
  然而Socket编程可以防止诸如性能问题,如果你要追求最快的应用,那么Socket是最适合的。
        

后论

  当今Web发展迅猛,微软等公司推出一系列解决方案。对于一般的HTML设计者而言,选择PHP或者embPerl(就是Perl语言的HTML可嵌入式编写)。因为它们可以在大多服务器上使用。如果已经是程序设计专家,那么使用CGI 是最好的,我们不难发现,目前很多大型网络服务商都使用的是CGI,它既没有Socket那么费劲,也比HTML可嵌入式编写的灵活性强。作为一个产品推出的Web应用,最好使用Socket,这样就可以完全脱离第三方软件的依靠。任何一个作为产品的软件,一般都是独立的。如果你觉得学习那么多程序语言太伤神,或者急于求成,并同时希望做除了Web应用以外更多的事情,那么选择Perl就是最好的了。当然,以上技术和程序语言都是目前较为流行的,除此之外还有Java和Python都不失为好的Web应用设计语言。然而很少有服务器支持Java和Python,虽然Java已经很热门了,但是在Web应用上的速度真是令人不敢恭维。它作为中型项目设计最好,如果一个服务器上同时运作多个Java程序,而且是微不足道的功能,那么就得不偿失了。
  我们知道计算机分为微型、小型、中型、大型……,然而我们现在用的大多也就是卫星计算机,我用过的最好的计算机也莫过于Sun,我看顶多也就是中型计算机。那么我们平时编写的软件没有多少能够称的上大中型的,顶多也就是小型应用。在Web应用上,一般都是微型的,正是因为如此,我们可以见到使用C等语言编写的Web应用实在少得可怜。这就是因为很多功能根本不需要C这样的语言,你用Perl来编写的同一个功能只需要300行代码5个小时,然而用C至少1800行至少一日。有一片著名文章,详细讲述了脚本程序设计的比传统程序设计的好处《Scripting: Higher Level Programming for the 21st Century》URL地址是:http://dev.scriptics.com/people/john.ousterhout/scripting.html。
  如果你有什么观点亦可发电邮给我: [email protected]


----
CGI技术版主★

天水——
Sam Tanshuai帅哥
<img src="http://uh1.gz.163.com photo?name=tanshuai"> 
小型应用程序设计师
E-Mail:[email protected]
:www.tanshuai.net 
OICQ:66552 ICQ:25856530  

 

[关闭][返回]