perl - Moose真的这么慢吗?

标签 perl moose

我最近下载了 Moose。作为实验,我重写了 Moose 中的一个现有模块。这似乎是避免编写大量重复代码的便捷方法。我运行了模块的测试,我注意到它有点延迟。我用 -d:DProf 分析了代码,似乎只包括该行

no Moose;

代码中的运行时间增加了大约 0.25 秒(在我的电脑上)。这是典型的吗?我是不是做错了什么,是我安装错了,还是我们真的应该期待这么多延迟?

最佳答案

是的,使用 Moose 会受到一些惩罚。但是,这只是启动惩罚,而不是运行时;如果您正确编写了所有内容,那么运行时的速度会非常快。

您是否还包括此行:

__PACKAGE__->meta->make_immutable;

当你no Moose; ?调用此方法将使其(运行时)更快(以启动时间为代价)。特别是,对象构造和销毁在您的类中有效地“内联”,不再调用元 API。强烈建议您使您的类不可变。它使您的代码更快,编译时间成本很小。这在创建许多对象时尤其明显。 1
2

但是,有时这个成本还是太大了。
如果您在脚本中使用 Moose,或者以其他方式编译时间占总使用时间的很大一部分,请尝试执行 s/Moose/Moo/g -- 如果你不使用 MooseX 模块,你可以切换到 Moo ,其目标是更快(在启动时),同时保留 Moose 90% 的灵 active 。

由于您正在使用 Web 应用程序,您是否考虑过使用 Plack/PSGI?

1 From the docs of make_immutable, in Moose::Cookbook::Basics::Recipe7
2另见 Stevan Little 的文章:Why make_immutable is recommended for Moose classes

关于perl - Moose真的这么慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3162390/

相关文章:

python - 以编程方式编辑 Photoshop PSD 文本图层

perl - 驼鹿 (Perl) : access attribute definitions in base classes

perl - 如何使Mason2 UTF-8干净?

perl - 修改继承的访问器并保留修饰符

perl - Moose,Try::Tiny和TryCatch的奇怪行为

java - 将 Perl 脚本中的值返回到 java 表单

perl - 我认为在 perl 中的 Telnet 输入缓冲区问题

perl - 如何调试 DBIx::Class?

perl - 如何使用变量而不是文件句柄

perl - 使用 MooseX::Params::Validate 传递条件参数