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 },

t/get.t  view on Meta::CPAN

#!/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;

t/get.t  view on Meta::CPAN

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 },

t/set.t  view on Meta::CPAN

#!/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;

t/set.t  view on Meta::CPAN

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 )