5

使用 MooseX::Declare 的性能是否主要是在它发挥其初始魔力时遇到的(即将定义“翻译”成标准 Perl 语法)?即,一旦编译和初始运行时设置完成,调用 MooseX::Declare 方法与通过传统声明定义的方法是否存在性能差异?

4

2 回答 2

8

答案是肯定的和否定的。由于 MooseX::Declare 使用MooseX::Method::Signatures进行参数解包和验证,因此与根本不验证参数相比存在运行时开销。

但是,如果您对“传统声明”的想法包括验证参数的数量和类型(如果您想要健壮的代码则应该这样做),那么没有理由认为 MXD/MXMS 的验证会比您的验证慢自己做。

于 2010-03-30T07:55:15.933 回答
2

MooseX::Declare 是声明性语法到“真正的”Perl 代码的编译时转换。它的所有开销都在编译时。

您所说的运行时开销将是 Moose 类型验证和强制。这两个都是可选的:您不需要指定类型限定符,也不需要指定is coerce. 如果您都不使用,您的运行时性能应该非常接近没有 MooseX::Declare 的魔法时的性能。

所以在运行时,它是双赢的。您只需为使用的功能付费。无论如何,类型验证都是您必须手动执行的操作,并且强制,虽然肯定会影响性能,但在每个参数的基础上启用。

于 2010-03-30T23:08:35.737 回答