当前位置: 首页 > 知识库问答 >
问题:

Perl:长包名会影响解析性能吗?

陆俊迈
2023-03-14

假设我定义了两个包(都是perl类和对象

package FooRecord;

package FooBarHelloWorldRecord;

.当上述类的实例访问它们的方法时,会有性能差异吗?我认为“长包名”会导致性能差异,因为perl在方法解析期间会对名称进行字符串比较。

my $fooRecord = new FooRecord();  
$fooRecord->getFooData();

my $fooWorldRecord = new FooBarHelloWorldRecord();  
$fooWorldRecord->getWorldData();

由于在上述方法调用中会有名称解析,第一个(由于名称较短)将比第二个包名方法调用表现出更好的性能。

推测:perl不保留包名的哈希值,并且(在内部)与它们进行比较吗?

共有1个答案

姚凯歌
2023-03-14

是的,这确实会带来不同:

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%    --

就我个人而言,这不是我会选择的优化方式。我通常倾向于使用更长、更具描述性的类名。

 类似资料:
  • 问题内容: 例如,我喜欢在Redis中使用冗长的名称。 这样可以吗?还是会影响性能? 问题答案: 您正在谈论使用的密钥并没有那么长。 您提供的示例键用于一个集合,集合查找方法为O(1)。集合(SDIFF,SUNION,SINTER)上更复杂的操作是O(N)。可能的是,与使用较长的键相比,填充是更昂贵的操作。 Redis带有一个称为的基准实用程序,如果您修改src / redis-benchmark

  • 问题内容: 我正在使用MySQL + Hibernate。 MySQL表名长度和列名长度会影响应用程序性能吗? 例如) 哪个更好 ? 问题答案: 不,它不会,在任何程度上都无法衡量。 花更多的精力使您的架构易于理解。从长远(短期)来看,您获得的收益将超过使用较短且难以理解的模式名称所获得的无法衡量的飞秒。

  • 本文向大家介绍使用匿名函数会影响性能吗?,包括了使用匿名函数会影响性能吗?的使用技巧和注意事项,需要的朋友参考一下 从某种意义上说,使用匿名函数会影响性能,您需要在每次迭代时创建一个新的函数对象。匿名函数始终使用变量名加载。顾名思义,匿名允许创建没有任何名称标识符的函数。它可以用作其他函数的参数。使用变量名调用它们- 示例 这就是可以使用JavaScript匿名函数的方式- 这是一个例子-

  • 问题内容: varchar列上的索引是否会使查询运行缓慢?我可以将其设为int。而且我不需要做LIKE%比较。 问题答案: varchar列上的索引是否会使查询运行缓慢? 不,不是的。 如果优化器决定使用索引,则查询将运行得更快。 该表上的s / s / s会变慢,但不太可能引起注意。 我不需要做LIKE%比较 请注意,使用: …将 不 使用索引,但以下内容将: 关键是在字符串的左侧使用通配符,这

  • 问题内容: 在SQL Server中使用完全限定的表名是否会对性能产生影响? 我有一个查询,在这里我要连接不同数据库中的两个表。DBA建议在主机查询中省略数据库名称,我猜这是出于性能或惯例的考虑。 所有表完全合格 首选? 这实际上有区别吗? 问题答案: 通常最好使用完全限定的名称,但要考虑一些注意事项。我会说这在很大程度上取决于要求,并且一个答案可能无法满足所有情况。 请注意,这只是一个编译绑定,

  • 问题内容: 在浏览器中,缩小和隐藏或加载异步JavaScript会对性能产生积极影响。在Node.js中运行的代码是否也是如此? 如Example那样,过多的注释和为实例化的类的属性使用长名称通常会严重影响性能和内存使用吗? 问题答案: 是的 ,它可以提高编译时的性能,但是编译时对您的整个过程生命周期而言无关紧要,因此无关紧要。唯一的区别是,如果您出于某种奇怪的原因而不断地启动和停止节点程序,那么