2008-11-23 61 views
3

我正在开发Apache共享托管服务器的Web应用程序。我已经在Perl中编写了一些代码,但是最近我发现,令我惊讶的是,共享主机提供程序没有提供mod_perl或安装它的方法。PHP或vanilla Perl CGI更快吗?

我一直有点担心,通过CGI运行Perl Web应用程序而不使用mod_perl会使其非常慢?我是否应该将所有代码切换到PHP,这会更快吗?

我首先选择Perl的原因是,我比Perl更熟悉Perl。另外,我希望能够在Web开发领域之外使用我的Perl库。

所以,如果你们中的任何一个人都熟悉Apache Web开发,你能否对我应该采取哪个方向有所了解。

为了这个问题,可以说网络应用程序每天将获得500多次点击。

哪个更快的PHP或Perl没有mod_perl?

在此先感谢您的帮助。

+0

这取决于PHP如何运行。作为CGI的PHP(通常由宿主运行)肯定比Perl的CGI或FastCGI慢。 – 2010-03-11 19:00:35

回答

7

PHP会更快。

但是,每天只有500次点击,使用cgi不会是一个问题。即使每小时点击500次也没有。

+0

好的,谢谢,我刚刚听说mod_perl比cgi perl好多了,我可能没有意识到cgi perl仍然非常快。 – 2008-11-23 23:14:31

+2

说一个Apache模块比CGI更快会更准确 - 这不是一个真正的语言问题。 – 2008-11-24 03:07:37

5

速度不应该是你的关注。这两种语言都适用于Web应用程序。

6

除非您的共享主机将PHP作为CGI应用程序(而不是mod_php或FastCGI)运行,否则PHP几乎总是会变得更快。尽管作为CGI运行的Perl可能每天可以处理500次点击,但使用CGI开发的应用程序/页面将会迟缓。

CGI的工作原理是产生一个新的进程为每个请求运行程序。 mod_php和FastCGI应用程序都通过产生一组进程来缓解这种情况,然后使用它们来运行应用程序。换句话说,每个请求都不会产生新的进程。 (这是一个过于简单的解释,请不要在CS期限纸张使用。详情参见mod_php,并且和FastCGI文档)

  1. 你能想出病理例子,其中它不会是,但你'd是提供病态病例的人,没有人愿意
+0

mod_php实际上在Apache中嵌入了一个PHP解释器。这使得PHP执行速度更快,但如果您关心速度,您确实应该安装操作码缓存。 – Powerlord 2008-11-24 03:59:27

+2

您知道,如果您将苹果与苹果进行比较,即mod_perl将mod_php或perl CGI更改为PHP CGI,则perl的速度通常会更快。当然不会更快,但有一点。尝试搜索“编程语言枪战”。 – tsee 2008-11-24 20:26:35

+0

我相信苹果比较苹果,但原始海报的问题是关于共享主机,大多数共享主机不支持mod_perl, – 2009-05-07 09:08:57

5

扩展什么Alan Storm said,你可能可以使用Perl与FCGI来代替。

FCGI的工作方式是拥有一种独立的服务器,如果您喜欢,可以通过FCGI协议与您的Web服务器连接并委托/调度请求。

这比正常的CGI更快,因为它模拟了一种“servlet”模型,应用程序是持久的,并且不需要像普通CGI那样对每个调用进行新的初始化。

我还没有学会如何做到这一点,但我相信催化剂有这个选择,所以它只是学习如何复制这个问题。

由于FCGI应用程序并非特定于Web服务器,并且某些Web服务器通过fcgi实用程序实现了PHP,所以FastCGI/FCGI应该在比普通的旧mod_perl多得多的主机上可用。

我已经试验了FCGI的一点点webseries,初步测试表明它可以处理至少500个请求/秒,远远超过500 /天或500 /小时的上述问题。

6

很大程度上取决于您的架构。现代Perl框架不适合用作CGI(长启动时间)。如果你使用CGI,Catalyst可能不是个好主意。这就是说,使用古典建筑应该是相当易于管理的。

8

每天只有500次点击,您可以在任何地方编写代码,而不必担心速度缓慢。每天500次点击每3分钟约1页。即使假设一个非正常的点击分布,你也不必担心这种小流量数量。

5

对于您正在查看的流量而言,带有香草CGI的Perl应该不是问题,尽管我会继续介绍早先提出的将FastCGI作为您的托管服务可能提供的另一选项的建议。

或者另一个选择是寻找一个不同的托管公司...

2

每个人心中的答案是:谁在乎。 每天500个请求不算什么。

只需使用最快的实现/维护和继续前进。

3

将fastcgi支持破解为不支持它的主机帐户是可能的。我编译了fastcgi库,并将安装前缀设置为与主机帐户上的主目录相同。然后我同步它并设置催化剂来使用小型cgi-fcgi桥。它运作良好。好而快,因为cgi桥只是一个小小的可执行文件。催化剂过程在后台保持良好状态。

0

这主要取决于代码的复杂程度以及如何组合在一起;如果将它作为CGI运行,perl将在每次调用时编译脚本和模块,并且每次请求都必须重新连接到数据库。如果您的代码足够复杂,则每次浏览量可能需要几秒钟,这可能会影响用户体验。

如果您的代码库和使用的模块虽然不是很大,但应该没有问题。

您可以在您的代码上执行perl -c,以了解perl启动和编译时间有多长。