【问题标题】:Should I combine my Perl library and CGI program into one file for FastCGI?我应该将我的 Perl 库和 CGI​​ 程序合并到一个文件中以供 FastCGI 使用吗?
【发布时间】:2010-11-05 15:46:26
【问题描述】:

我正在重写一个 CGI 脚本来使用 fastcgi 模块。我的初始程序由两个脚本组成。一个“需要”另一个。在效率方面,我是否需要重新考虑整个“require”脚本并将它们合并到一个文件中?脚本可以总结如下:

脚本 A:

use FCGI;
# Do a lot of stuff and slurping (memory intensive)
sub use_my_slurped {
# Do sub here
}

sub use_my_slurped2 {
# Do sub here 
}

###############
# EOF A#
###############


Script B:
require A;

while (FCGI::accept >= 0) {
# main program functions
$blah = use_my_slurped (X,Y,Z)
print "Some HTML stuff $blah"; 
}

【问题讨论】:

    标签: perl fastcgi


    【解决方案1】:

    首先,A 不是脚本,而是 perl 库。

    其次,FastCGI 可以在不修改的情况下优雅地处理这个问题。这取决于 A 是否是完全限定的文件名。

    第三,工作量很少 A 可以成为一个模块,然后一切都应该正常工作。

    # A.pm
    sub func1 {}
    sub func2 {}
    
    1;
    

    然后

    # B.cgi
    use lib qw( /path/to/dir/containing/above );
    use A;
    # ...
    my $blah = func1();
    

    【讨论】:

    • 这仍然没有告诉我应该在哪一个或两个中使用快速 cgi 循环。这是我主要关心的问题。如果我最终“使用”了 A.pm,那么它会在网络服务器启动时加载一次且仅加载一次吗?
    • 您的意思是有时 A.pl 会跳入 B.pl,有时会反过来?这太疯狂了。但考虑到这一点,也许你应该有一个 C.pl,它同时加载 A.pm 和 B.pm,然后为你处理 FCGI。 C 代表控制器。然后努力把你的意大利面变成 lazanga。
    【解决方案2】:

    将它们保留为单独的文件应该没有问题。 FastCGI 不需要为每个请求加载和编译库,因此启动时间并不像在普通 CGI 中那样重要。除非您正在寻找要处理的事情,否则我可能会不理会它。

    但是,如果该库是以某种奇怪的方式编写的,您需要在每个请求中加载一次,那就另当别论了。

    对于您的示例,我认为您需要将所有 FastCGI 内容移动到同一个文件中。您将模块(例如 FCGI)加载到您想要使用该模块中的内容的文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 2011-07-02
      • 2010-11-07
      • 2013-12-21
      • 2011-02-13
      • 2014-02-12
      • 1970-01-01
      相关资源
      最近更新 更多