假设我定义了两个包(并且都是perl类和对象)
package FooRecord;
和
package FooBarHelloWorldRecord;
。 当上述类的实例访问其方法时,是否会有性能差异? 我建议“long package name”会导致性能差异,因为perl会在方法解析过程中对名称进行字符串比较。
my $fooRecord = new FooRecord();
$fooRecord->getFooData();
my $fooWorldRecord = new FooBarHelloWorldRecord();
$fooWorldRecord->getWorldData();
由于上述方法调用中将存在名称解析,因此第一个(由于名称较短)将表现出比第二个包名称方法调用更好的性能。
推测:perl是否不保留包名的哈希值并与它们进行比较(内部)?
答案 0 :(得分:3)
是的,确实有所作为:
use v5.14;
use warnings;
use Benchmark 'cmpthese';
package Foo {
use Class::Tiny;
}
package FooButMuchMuchMuchMuchMuchMuchMuchMuchMuchMuchLonger {
use Class::Tiny;
}
package FooBut::So::So::So::So::So::So::So::So::Much::Deeper {
use Class::Tiny;
}
cmpthese -1, {
'short' => q{ Foo->new },
'long' => q{ FooButMuchMuchMuchMuchMuchMuchMuchMuchMuchMuchLonger->new },
'deep' => q{ FooBut::So::So::So::So::So::So::So::So::Much::Deeper->new },
}
__END__
Rate deep long short
deep 45510/s -- -12% -19%
long 51692/s 14% -- -8%
short 56366/s 24% 9% --
就个人而言,这不是我选择优化的方式。我通常喜欢更长,更具描述性的类名。