HTML :: FormHandler在使用mod_perl的Catalyst中变慢

时间:2013-01-30 05:50:07

标签: perl html-form catalyst mod-perl2 performance

我在HTML::FormHandler / mod_perl应用中使用Catalyst为我的用户生成表单。它工作正常,唯一的问题是它减慢了很多页面加载时间。这是我创建新表单的子例程:

sub edit : Chained('base') PathPart Args(0) {
    my ( $self, $c ) = @_; 

    my $form = myapp::Form::Account::Edit->new;

    #validation stuff, etc
    #...
}

只需添加一行“my $form = myapp::Form::Account::Edit->new;”,我的页面加载时间就会从50毫秒增加到500-1000毫秒。我知道有些人可能会争辩说网站的500-1000ms页面加载时间仍然很好,但是我希望这个网站能够获得高流量,而现在只需要一个用户加载一个页面需要花费很长时间。我知道HTML :: FormHandler很大,因为它使用Moose,但是在加载一次之后它不应该已经加载了吗?有没有什么方法可以加快这个,或者这只是使用HTML :: FormHandler的代价?如果可以的话,我真的很想继续使用它,因为它让我的编码生活更容易:)

2 个答案:

答案 0 :(得分:3)

您还可以在控件的Moose属性中构建表单,使表单保持不变。这意味着来自上一个请求的信息仍将在表单对象中,并将在下一个请求开始时清除(或者在呈现表单后由程序员清除)。您还必须清除已添加到表单中的任何其他属性,或确保在每个“进程”调用中设置它们。

答案 1 :(得分:1)

您可以在应用程序调用之前加载带mod_perl的模块。

http://www.conceptsolutionsbc.com/perl-articles-mainmenu-41/29-perl-and-apache/55-modperl-part-2-pre-loading-perl-modules

#put his to apache config file:
PerlModule HTML::FormHandler;

编辑:

为了加快runtuime的速度,您可以使用memoize来加快速度。

创建一个名为get_form_handler的新子,并记住其输出。

您甚至可以使用Cache-FastMmap一次存储此对象(输出)并在进程之间共享。

此致