Performance 什么更有效:$self->;方法或$\u0]->;方法?
Perl方法通常以Performance 什么更有效:$self->;方法或$\u0]->;方法?,performance,perl,self,Performance,Perl,Self,Perl方法通常以my$self=shift开始并随后使用$self引用它作为方法的对象 sub foo { my $self = shift; $self->method; ... return $self->{_foo} } 另一种方法是直接使用$\u0]而不是将$\u0]复制到$self: sub foo { $_[0]->method; ... return $_[0]->{_foo} } 现在,什么更高效(更快): 要将内存分配给
my$self=shift开始
并随后使用$self
引用它作为方法的对象
sub foo {
my $self = shift;
$self->method;
...
return $self->{_foo}
}
另一种方法是直接使用$\u0]
而不是将$\u0]
复制到$self
:
sub foo {
$_[0]->method;
...
return $_[0]->{_foo}
}
现在,什么更高效(更快):
$self
,请获取列表的第一项@
,并在每次调用方法时将此值复制到该变量$\u0]
时获取数组的第一项纯性能方面,
$\u0]
更快
- 它避免了创建新变量
- 它避免了移动数组
@
- 唯一的成本是通过索引进行访问
然而,在当今的计算中,这种差异实际上是最小的。为了清晰起见,通常建议使用第一种方法。从技术上讲,如果您有足够高的分辨率基准测试工具,使用
$[0]
应该稍微快一点,至少在子系统中只使用一次或两次的情况下是如此。如果在同一方法中多次引用对象,$self
可能会因为避免了大量数组操作而胜出
所有这些都是毫无意义的。
在过去的15年里,我一直以Perl作为我的主要语言。我目前是PerlWeb服务的三名维护人员之一,该服务每天处理数百万个请求。如果将我接触过的每个Perl程序的每次调用中的每个方法调用中使用$\u0]
或$self
之间的处理时间差异加起来,它所花费的时间仍然比你问问题或我回答问题所花费的时间要少。可能比我写这句话花的时间还要少。差别真的很小
因此,优化可读性,而不是尝试微观优化性能。您的维护程序员(包括未来六个月内的您)会为此感谢您。您使用$\u0]->方法在速度方面一无所获(类似于单引号与双引号“优化”),只会失去源代码的可读性。这种微优化就像是更换汽车的油漆以使其运行更快。除非你是一级方程式赛车手,否则差别可以忽略不计。