App-Benchmark-Accessors
view release on metacpan or search on metacpan
lib/App/Benchmark/Accessors.pm view on Meta::CPAN
benchmark results on many different platforms and for many different perl
versions.
The C<t/construction.t> file benchmarks object creation, C<t/get.t> benchmarks
getter methods and C<t/set.t> benchmarks setter methods.
Not every benchmark is run on every module; for example, L<Object::Tiny>
doesn't create setter methods, and L<accessors> doesn't generate constructors.
Each benchmark test file takes an optional numeric parameter that is used as
the number of iterations.
It's probably a good idea not to read too much into these benchmarks; they
could be seen as micro-optimization. However, if you have a complex object
hierarchy and create lots of objects and run many many getters/setters on
them, they could help to save some time. But be sure to use L<Devel::NYTProf>
first to see where your real bottlenecks are.
=head1 AUTHORS
The following person is the author of all the files provided in
t/construction.t view on Meta::CPAN
#!/usr/bin/env perl
use warnings;
use strict;
use App::Benchmark;
use App::Benchmark::Accessors;
my $iterations = shift;
$iterations ||= 200_000;
benchmark_diag(
$iterations,
{ moose => sub { WithMoose->new },
moose_immutable => sub { WithMooseImmutable->new },
mouse => sub { WithMouse->new },
mouse_immutable => sub { WithMouseImmutable->new },
class_accessor => sub { WithClassAccessor->new },
class_accessor_fast => sub { WithClassAccessorFast->new },
class_accessor_fast_xs => sub { WithClassAccessorFastXS->new },
class_accessor_complex => sub { WithClassAccessorComplex->new },
class_accessor_constructor => sub { WithClassAccessorConstructor->new },
class_accessor_lite => sub { WithClassAccessorLite->new },
#!/usr/bin/env perl
use warnings;
use strict;
use App::Benchmark;
use App::Benchmark::Accessors;
my $iterations = shift;
$iterations ||= 2_000_000;
my $Moose = WithMoose->new;
my $MooseImmutable = WithMooseImmutable->new;
my $Mouse = WithMouse->new;
my $MouseImmutable = WithMouseImmutable->new;
my $ClassAccessor = WithClassAccessor->new;
my $ClassAccessorFast = WithClassAccessorFast->new;
my $ClassAccessorFastXS = WithClassAccessorFastXS->new;
my $ClassXSAccessorCompat = WithClassXSAccessorCompat->new;
my $ClassAccessorComplex = WithClassAccessorComplex->new;
my $ClassAccessorConstructor = WithClassAccessorConstructor->new;
my $Spiffy = WithSpiffy->new;
my $ClassSpiffy = WithClassSpiffy->new;
my $ClassXSAccessor = WithClassXSAccessor->new;
my $ClassXSAccessorArray = WithClassXSAccessorArray->new;
my $ObjectTinyXS = WithObjectTinyXS->new;
my $Rose = WithRose->new;
#my $BadgerClass = WithBadgerClass->new;
my $RubyishAttribute = WithRubyishAttribute->new;
benchmark_diag(
$iterations,
{ moose => sub { $Moose->myattr },
moose_immutable => sub { $MooseImmutable->myattr },
mouse => sub { $Mouse->myattr },
mouse_immutable => sub { $MouseImmutable->myattr },
class_accessor => sub { $ClassAccessor->myattr },
class_accessor_fast => sub { $ClassAccessorFast->myattr },
class_accessor_fast_xs => sub { $ClassAccessorFastXS->myattr },
class_xsaccessor_compat => sub { $ClassXSAccessorCompat->myattr },
class_accessor_complex => sub { $ClassAccessorComplex->myattr },
class_accessor_constructor => sub { $ClassAccessorConstructor->myattr },
#!/usr/bin/env perl
use warnings;
use strict;
use App::Benchmark;
use App::Benchmark::Accessors;
my $iterations = shift;
$iterations ||= 2_000_000;
my $Moose = WithMoose->new;
my $MooseImmutable = WithMooseImmutable->new;
my $Mouse = WithMouse->new;
my $MouseImmutable = WithMouseImmutable->new;
my $ClassAccessor = WithClassAccessor->new;
my $ClassAccessorFast = WithClassAccessorFast->new;
my $ClassAccessorFastXS = WithClassAccessorFastXS->new;
my $ClassXSAccessorCompat = WithClassXSAccessorCompat->new;
my $ClassAccessorComplex = WithClassAccessorComplex->new;
my $ClassAccessorConstructor = WithClassAccessorConstructor->new;
my $Spiffy = WithSpiffy->new;
my $ClassSpiffy = WithClassSpiffy->new;
my $ClassXSAccessor = WithClassXSAccessor->new;
my $ClassXSAccessorArray = WithClassXSAccessorArray->new;
my $ObjectTinyXS = WithObjectTinyXS->new;
my $Rose = WithRose->new;
#my $BadgerClass = WithBadgerClass->new;
my $RubyishAttribute = WithRubyishAttribute->new;
benchmark_diag(
$iterations,
{ moose => sub { $Moose->myattr(27) },
moose_immutable => sub { $MooseImmutable->myattr(27) },
mouse => sub { $Mouse->myattr(27) },
mouse_immutable => sub { $MouseImmutable->myattr(27) },
class_accessor => sub { $ClassAccessor->myattr(27) },
class_accessor_fast => sub { $ClassAccessorFast->myattr(27) },
class_accessor_fast_xs => sub { $ClassAccessorFastXS->myattr(27) },
class_xsaccessor_compat =>
sub { $ClassXSAccessorCompat->myattr(27) },
class_accessor_complex => sub { $ClassAccessorComplex->myattr(27) },
( run in 1.603 second using v1.01-cache-2.11-cpan-71847e10f99 )