| CGI/PERL的现在与未来 |
| 日期:2001年7月17日 作者:不详 人气: 查看:[大字体
中字体 小字体]
|
从1997年接触CGI以后,我就发现我渐渐的喜欢上了它,当时我国还是
HTML的时代,好的动态网站不多。其中由网易开发的163电子邮局,更让我
喜欢CGI。在当时CGI这个名词在中国的网络上出现的频率少之又少,ASP刚
刚浮出水面,更听不到PHP这个现在无人不晓的程序语言。就在今年,PHP好
像一夜间就侵袭整个地球。在中国的网站到处可以见到以点PHP结尾的URL,
PHP的贴子,PHP的文章和程序代码。而你几个月前,还看到某个网站在招聘
CGI/PERL程序员的时候,今天却换成了PHP。一时间我的大脑膨胀的不得了,
我不知道我是否应该放弃CGI/PERL,去学习PHP。我在论坛做了很久的
CGI/Perl版主,起初当时还没有听说PHP这个脚本语言,几个月后出现了
PHP版,它以迅雷不及掩耳之势迅速追赶一切的一切,几乎成了当时的焦点。
而批评、蔑视和诋毁CGI/Perl文章的也逐渐多了起来。写了3年的CGI/Perl
程序,今天突然被称为速度慢、耗费系统资源和语言复杂等种种原因好像变
成了程序中的垃圾。因此,我在此的犹豫不决,让我更多的了解了CGI、ASP、
API和PHP这四种WEB上最常见的语言。
在CGI中,有众多语言,包括:C/++、Perl、TCL、Basic等。其中
由于Perl的易编译调试、移植性颇强。几乎成了CGI的标准,或代言词。每
每当人们提到CGI的时候,你必然会想到PERL。前些月人们还在CGI与 ASP
之间的争执,但实事证明了ASP并不是最好的网络语言,它的安全性令人担
忧,它的移植性更令人头疼。面对着抄得沸沸扬扬免费的Linux,你只能感
到无奈,只好掏出腰包给微软来换取新的Windows。PHP和ASP一样都是被称
为“可嵌入式”的程序脚本语言和强大的数据处理能力。并大大贬低了
CGI/PERL在此的用处。在一篇介绍PHP的文章中这样说:“用Perl/C等写的
CGI脚本是一种“非嵌入式”的服务器端脚本,因为它是一个单独的程序,
而不是嵌在HTML文档中再通过另一个程序解释替换。例如,下面的Perl程序:
print "Content-type:text/html\n\n";
print <<HeadofHTML;
<HTML>
<HEAD>
<TITLE>Hello!</TITLE>
</HEAD>
<BODY>
HeadofHTML
print "<CENTER>aaa</CENTER>";
print "</BODY></HTML>"; “
在这个脚本中,它的确是非嵌入式的,但是我们要了解到是,早在公
元1996年8月份,可嵌入是的CGI脚本程序已经开发成功,它就是ePerl
。因为它并不是CGI/Perl的主要功能,只有国外一些网站在使用,在国内
很少会知道。它PHP 一样有着可嵌入是的功能。一个普通Perl的例子:
print "foon";
print "barn";
print “HELLO WORLD”;
print "baz n";
print "quuxn";
采用ePerl 以后:
foo
bar
< ? print “HELLO WORLD”; !>
baz
quux
而PHP:
foo
bar
<? echo “HELLO WORLD”; !>
baz
quux
从上面三个里之中,我们可以看出,Perl和PHP一样都具有嵌入的功能,
当然你非要说echo比print少一个字母我也没有办法:)另一个是embPerl,
embPerl在和ePerl很多方面都很相像。它们的主要不同在于ePerl不是HTML
专用的,而embPerl是专门用于HTML的。EmbPerl提供了一些元命令来完成
特殊任务,像填充HTML表等等。用了特殊的方法解释一些HTML标记。但是学
习新的语法比较费劲,不过ePerl它和Perl没有什么区别,如果需要用于一般
目的的嵌入Perl方案,ePerl更佳。而EmbPerl在特殊的时候更为出色。在使
用eperl和EmbPerl前必须安装它们的模块。这里介绍ePerl在Unix类型系统中
的安装方法:
首先到:www.engelschall.com/sw/eperl/下在相应的ePerl模块,
在eperl源目录下面依次输入:perl Makefile.pl、make、make test、make
install。在以SSI形式使用ePerl的时候,这些命令将安装在 Apache::
Perl模块。修改httpd.conf文件,
<Location /eperl/>
SetHandler perl-script
PerlHandler Apache::ePerl
</Location>
CGI/Perl的最大致命弱点,即人们说所的速度和系统资源。的确,它
在这个方面有很大不足。我们知道一般CGI/Perl每一次启动都要启动一个
进程,如果有2万人同时在一个聊天室里聊天,那么就会产生2万个进程,
在强大的中央处理和在大的内存都很难处理如此之多的进程。但是每一种
东西,总是会有最终的解决方案,要不然微软的HOTMAIL为何至今还用CGI
呢?
Fast-CGI,是把原来的CGI进行优化,即原来2万的用户聊天的时候,
只启动一个进程,这样大大节省了系统资源。比如普通的脚本:
Print “Content-type : text/htmlnn”;
Print “I Love Perl”;
这样的程序,每一次都要启动一个进程。
而使用了FCGI模块以后:
use FCGI;
while(FCGI::accept() >=0 )
{
print "Content-type: text/htmlnn";
print "I Love Perl”;
}
exit 0;
这样每次之需要启动一个CGI进程,大大缓解了过渡占用系统资源
的问题。
从CGI转化到FCGI,并不难,只要了解它的基本结构。
如上面的两个例子,只要把Print“Content-type : text/html\n\n”;
Print“I Love Perl”;这两句,套入响应循环代码中就可以了。当然前
提是你要安装了FCGI这个模块,否则就会出现错误。在UNIX类型系统(包
括: Linux/FreeBSD/SunOs),你可以这样:
下载,到www.cpan.org下载FCGI模块,然后tar zvxf filename.
tar.gz,完成后出现以该文件名命名的目录,进入目录后,依次输入perl
Makefile.pl、make、maketest,然后开始安装make install。怎样就
完成了。
在Windows中,我用的是Perl 5.2,本来是Perl 5.6,可是怎么也
没有安装上去,我的朋友也是如此。到
http://www.activestate.com/ppmpackages/5.005/zips下载FCGI模
块后,解压缩。启动MS-DOS窗口。提示符下面输入ppm,然后出现PPM>,
输入install /path/to/filename。就大功告成了。
CGI的另一个好处是加密性强,大家都知道C/C++编译出来最终运行的
程序是二进制的,你无从猜想它的源代码。而Perl是解析性语言,我想大
多数程序员有和我同样的想法,如何把Perl加密从而保护我们的知识结晶
。当时最为风行的是Perl2Exe,很多人用了它,把自己的Perl加密,当你
得意洋洋的说你的程序是用C编写的时候,Exe2Perl的反编译程序已经出世
了。然而很多人没有意识到Perl从自始至终都提供一个perlcc的程序,可
以将目前的Perl源代码转化成C源代码并编译,方法很简单在CMD模式下面
输入 perlcc filename.pl 即可!在不同的操作系统上可以编译出不同
的兼容操作系统的二进制可执行的CGI。这个时候你就可以骄傲的说,你的
程序使用C编写的了。在这一点,目前任何程序语言都无法与其比美(据我
所知Java可以被反编译出原始代码)。如果你想把你的商用程序出售,而
又不愿意出售源代码,你最好的选择就是CGI了。
我一直在寻求一个科学的文章,来审视众多语言中那个是最好的。我
想有很多人都是这样。比尔盖茨至今可能还认为世界上最好的语言是Basic
。本我主要地目的是,让更多的人真正知道CGI与其它程序的分别,好与弊
。每种程序语言都有它的好的一面和坏的一面。我们不应该去偏袒某一方,
或诋毁某一方。让CGI的程序员们不会被老板骂。当你用FCGI写出来的程序,
将会比你以前的程序快得多。我目前正致力于把我十几个的商用程序进行FCGI
的优化,效果的确不错。当你学习过CGI ASP和 PHP之后,你会感觉到CGI
更加适合于大型程序的编写。曾经有人这么评论:
小型站台php(比如GuestBook)
中型大型用perl+fastcgi(比如Webmail Business)
巨型用C/C++语言……
如果您有什么独特见解或疑问,小生愿洗耳恭听,电邮给我Tanshuai@Bigfoot.com。(出处:不详 ) |
| 相关文章: |
|
|
|
| 相关软件: |
|
|
|