我何时应该使用Perl CGI而不是PHP(反之亦然)?

Pet*_*ter 15 php perl cgi cpan

出于业余爱好的目的,我在托管服务器上有一个共享空间,它提供了许多PHP和Perl CGI.我已经阅读了几个CGI脚本现在已经过时的地方了,我认为主要是针对性能问题(比如PHP或vanilla Perl CGI更快吗?).

但是,自从我刚开始学习Perl以来,我不想浪费时间在PHP中实现更容易(或仅可能)在Perl中的解决方案.

还有样板问题,我知道CPAN(这是存在的,还不是内容),但不熟悉PHP库(虽然我毫不怀疑它们存在).我不准备从头开始编写登录程序或基本用户管理10 ^ 10次.

在这一点上,我也没有浪费大量时间研究业余爱好项目,所以我想,让我们请专家们了解一下.

dao*_*oad 31

如果您正在使用具有大量页面浏览量的大型复杂网站,那么CGI的"过时"实际上只是一个因素.

很多人都认为CGI已经过时并不能真正理解CGI是什么.人们普遍存在一种误解,认为CGI本质上是一种基于Perl的技术.许多人攻击CGI是为了支持他们支持的任何语言来填补对Perl的邪教攻击.如果您想成为一名真正的技术专家,您需要了解基本问题并根据具体情况做出选择.

CGI是一个带有网络服务器的界面,允许您以任何语言编写交互式页面 - 甚至可以使用.当服务器获取由CGI脚本控制的页面的请求时,服务器运行该脚本并将结果返回给请求者.

如果您的编程语言需要VM,解释器或编译器在每次执行时加载,那么每次访问页面时都需要这个启动时间.

像FastCGI,mod_php,mod_perl等CGI加速器始终在内存中保存解释器/ VM,可以保持库加载,甚至从脚本缓存字节码以减少脚本启动开销.

如果您正在制作一个简单,个人或爱好的网站,CGI将没事.PHP也是如此.

如果您的站点需要更快的技术,您可以转向mod_perl,FastCGI或其他CGI加速技术.

您使用的语言应该由它提供的工具以及它们如何满足您的需求来确定.

  1. 列出您需要的功能.
  2. 列出交易破坏者名单.
  3. 现在,根据这两个列表检查每个可能的工具集.
  4. 哪一个最好?测试一下.
  5. 它吸吮吗?将其从列表中删除,然后返回第4步.

另外,我建议不要使用befunge.仅仅因为它是可能的,它并不意味着你应该使用它.


更新: 正如mpeters指出的那样,mod_perl,mod_php,mod_ruby等等不仅仅是CGI加速器; 它们提供对Apache API的访问.它们充当CGI加速器,但可以做更多,更多.

FastCGI是纯CGI加速器.

更新2: PHP和CGI不是互斥的. PHP可以作为CGI安装.PHP通常与FastCGI一起使用.

  • 虽然大多数情况都是正确的,但mod_perl不仅仅是一个CGI加速器.实际上,这是一种让您能够在Perl中控制Apache请求周期的所有方面的副作用. (3认同)
  • 阿门.特别是"CGI与语言无关"的位 - 我写过的第一个CGI库实际上是在C中作为一个咨询工具(那是在大学时代,当时我对C非常好,但不知何故设法从未听说过Perl :) (2认同)

Sin*_*nür 8

这是一个相当主观的问题,决定什么用于业余爱好.我决定在研究PHP之后学习Perl作为一种爱好,并且不喜欢我无法读取大部分PHP并被内置函数列表吓到的事实.

我做的前几件事是联系表格的CGI脚本和相册生成器.我是在一个廉价的共享托管计划,我没有遇到任何性能问题所以性能问题从未发挥作用.

相反,comp.lang.perl.misc和CPAN的存在确保了我从未重新考虑过我不会深入研究PHP的决定.

与此同时,我意识到我的网站上的大部分内容一旦生成就是静态的,所以现在我编写Perl脚本来离线生成内容.

所以,我的答案是,选择一个小项目,任何事情都会做,并使用Perl和适当的CPAN模块实现它,看看你是否喜欢它.


Fra*_*mer 5

无论您是使用 PHP 还是 Perl,从扩展的角度来看都是没有意义的,就像用 PHP 和 C 编写的 web 应用程序之间的区别没有实际意义一样。如果差异真的很重要,我们都会编写 C 或汇编。

PHP 很慢,但这并没有阻止 Wikipedia、Facebook 和 Yahoo 广泛使用它。

从扩展的角度来看,您选择哪种语言并不重要有两个主要原因:

  1. 使用像 Squid 这样的缓存反向代理。通过卸载 apache 的大部分工作负载,您可以显着减少 CGI 调用负载。
  2. 扩展您的 Web 层很容易。它很难扩展您的数据库层。您始终可以向场添加另一个网络服务器。如果你可以用 mod_php 每秒处理 1000 个请求,用 CGI 每秒处理 500 个请求,如果你开发 CGI 更便宜、更快,那就去做吧。您需要两倍的网络头,但要么:
    1. 您处于网络的最底层 90%,并且无论如何只需要一个网络服务器。
    2. 您处于网络的前 10%,并且需要多个网络服务器——但您有足够的流量来证明额外的成本是合理的。

选择您和您的团队可以最有效地开发的语言。