【问题标题】:Is PHP or vanilla Perl CGI faster?PHP 或普通 Perl CGI 更快吗?
【发布时间】:2017-04-21 23:06:12
【问题描述】:

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

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

我首先选择 Perl 的原因是,比起 PHP,我对 Perl 非常熟悉。我还希望能够在 Web 开发领域之外使用我的 Perl 库。

如果你们中的任何人有 Apache Web 开发方面的经验,您能否说明我应该采取哪个方向。

对于这个问题,假设 Web 应用程序每天将获得 500 次以上的点击。

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

提前感谢您的帮助。

【问题讨论】:

  • 这取决于 PHP 的运行方式。 PHP 作为 CGI(通常由主机运行)肯定比 Perl 作为 CGI 或 FastCGI 慢。

标签: php perl


【解决方案1】:

每天只有 500 次点击,您几乎可以用任何方式编写代码,而不必担心速度变慢。每天 500 次点击平均每 3 分钟一页。即使假设点击量的分布是非正态分布的,您也不应该真正担心如此小的流量数字。

【讨论】:

  • 您应该担心它,以至于不选择使用任何依赖于更重要的框架之一,例如 Catalyst、Moose,甚至可能是 DateTime。页面点击次数如此之少并不意味着加载时间可以以秒为单位衡量。
  • @ysth + 有一天你会想知道如何以性感的方式做到这一点。我猜每天点击 500 次的网站没有多少钱!
【解决方案2】:

PHP 会更快。

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

【讨论】:

  • 好的,谢谢,我刚刚听说 mod_perl 比 cgi perl 好多少,我可能没有意识到 cgi perl 仍然非常快。
  • 更准确的说法是 Apache 模块比 CGI 更快 - 这不是真正的语言问题。
【解决方案3】:

很大程度上取决于您的架构。现代 Perl 框架不太适合用作 CGI(启动时间长)。如果您使用 CGI,Catalyst 可能是个坏主意。也就是说,使用经典架构应该是非常易于管理的。

【讨论】:

    【解决方案4】:

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

    CGI 的工作原理是为每个请求生成一个新进程来运行您的程序。 mod_php 和 FastCGI 应用程序都通过生成一组进程然后使用这些进程来运行您的应用程序来缓解这种情况。换句话说,不会为每个请求生成一个新进程。 (这是一个过于简单的解释,请不要在 CS 学期论文中使用。有关更多信息,请参阅 mod_php 和 FastCGI 文档)

    1. 你可以想出不应该的病态例子,但你会是那种想出病态例子的人,没有人想要这样

    【讨论】:

    • mod_php 实际上在 Apache 中嵌入了一个 PHP 解释器。这使得 PHP 执行速度更快,但如果你关心速度,你真的应该安装一个操作码缓存。
    • 你知道,如果你比较苹果和苹果,即 mod_perl 和 mod_php 或 perl CGI 和 PHP CGI,perl 通常会快一些。最肯定的是没有明显更快,但一点点。尝试搜索“编程语言枪战”。
    • 我相信苹果对苹果的比较,但原发帖人的问题是关于共享主机,大多数共享主机不支持 mod_perl,
    • 同时,这已经不是 1993 年了,fork() 真的没有那么慢,而且这里的音量不需要 CGI 之外的任何东西。
    【解决方案5】:

    速度不应该是您关心的问题。两种语言都适用于 Web 应用程序。

    【讨论】:

      【解决方案6】:

      对于您正在查看的流量,Perl 与 vanilla CGI 应该不是问题,尽管我会支持之前的建议,将 FastCGI 作为您的托管服务可能提供的另一个选项。

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

      【讨论】:

        【解决方案7】:

        扩展 Alan Storm said,您也许可以将 Perl 与 FCGI 一起使用。

        FCGI 的工作原理是拥有一种独立的服务器,如果你愿意的话,它是一个守护进程,它通过 FCGI 协议与你的 Web 服务器连接并委托/分派请求。

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

        我自己还没有学会如何做到这一点,但我相信 Catalyst 有这个选项,所以它只是学习如何复制它的问题。

        FastCGI/FCGI 应该比普通的旧 mod_perl 在更多的主机上可用,因为 FCGI 应用程序不是特定于 web 服务器的,并且一些 web 服务器通过 fcgi 实用程序实现 PHP。

        我已经对 FCGI webserving 进行了一些试验,初步测试表明它可以处理至少 500 个请求/秒,远远快于上述 500 个/天或 500 个/小时的问题。

        【讨论】:

        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

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

          只需使用最快的方法来实施/维护并继续前进。

          【讨论】:

          • 每个优秀的软件开发人员都应该关心。我以 500+ 为例,如果我的网站获得 100,000 分,我会很高兴,即使它是 1 次点击,它也应该高效运行,除非需要一些荒谬的时间来提高效率。
          • 您关心您的网站是否每天获得 500 次点击,并且每半秒用于启动您的 CGI 应用程序而不是运行在 mod_{php,perl} 中预加载的东西,因为每个用户都会决定您的网站速度很慢,你永远不会达到那 100,000。
          • @SukhbirS.Dadwal - 优秀的开发人员会按照海报所述的方式完成工作,并在业务接受范围内正确完成工作并继续前进。当需求更改为支持数千个并发会话时,然后在那个时候进行处理。在解决根本不存在的 CGI 速度问题上浪费时间、精力、资源和金钱简直是浪费。
          • @SukhbirS.Dadwal 如果您的网站增长如此之快,那么最终最重要的是您必须使网站继续发展以适应用户需求的灵活性。就此而言,语言和框架的选择比速度更重要。
          【解决方案10】:

          对于可以使用 CGI 工作的轻量级 Web 框架,请查看....

          【讨论】:

            【解决方案11】:

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

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

            您可以对代码执行 perl -c 以了解 perl 的启动时间和编译时间。

            【讨论】:

            • 如果未安装操作码缓存,PHP 必须在每次调用时重新编译您的脚本。数据库连接可以共享,但某些网络服务器(Apache 在 prefork 模式下)处理得不好。 PHP 真正的加速来自于 mod_php 嵌入到服务器进程中。
            猜你喜欢
            • 2018-03-10
            • 2011-06-01
            • 2013-05-13
            • 2021-03-22
            • 2021-06-11
            • 2011-09-16
            • 1970-01-01
            • 2011-05-26
            • 2010-10-24
            相关资源
            最近更新 更多