什么更有效:$ self->方法或$ _ [0] - >方法?

时间:2015-08-12 02:25:59

标签: performance perl self

Perl方法通常以my $self = shift;开头,然后使用$self来引用它作为方法的对象。

sub foo {
  my $self = shift;
  $self->method;
  ...
  return $self->{_foo}
}

另一种方法是直接使用$_[0]而不是将$_[0]复制到$self

sub foo {
  $_[0]->method;
  ...
  return $_[0]->{_foo}
}

现在,效率更高(更快):

  1. 将内存分配给新变量$self,获取列表@_的第一项,并在每次调用方法时将此值复制到该变量;

  2. 每次使用$_[0]时都会获取数组的第一项?

2 个答案:

答案 0 :(得分:5)

纯粹的表现,$_[0]更快。

  • 避免创建新变量
  • 避免转移数组@_
  • 唯一的成本是通过索引访问。

然而,现在这种差异在计算方面确实很小。为清晰起见,通常建议使用第一个。

答案 1 :(得分:5)

从技术上讲,如果你有足够高分辨率的基准测试工具,那么使用$_[0]应该稍微快一点,至少在你只在sub使用一次或两次的情况下。如果您以相同的方法多次引用该对象,$self可能会因为避免更多的数组操作而获胜。

所有这些都是绝对,毫无意义。

在过去的15年里,我一直在使用Perl作为我的主要语言。我目前是Perl Web服务的三个维护者之一,每天处理几百万个请求。如果你在我曾经触及过的每个Perl程序的每个调用中在每个方法调用中使用$_[0]$self之间的处理时间差异,那么仍然添加花费的时间少于你提出问题的时间,或者我花了很多时间回答它。可能比我写这句话的时间还要短。差别确实很小。

因此优化可读性而不是尝试微观优化性能。您的维护程序员(包括未来 - 您在六个月内)将感谢您。