Angelos::Class::Mixinableのベンチ
Mouseにして早いのかな
benchmark script
#!/usr/bin/perl use warnings; use strict; use FindBin; use File::Spec; use Benchmark qw(:all) ; use lib (File::Spec->catfile($FindBin::Bin,'./../lib'),File::Spec->catfile($FindBin::Bin,'lib') ); use Angel; use Moo; use Normal; cmpthese( 1000 , { angelos => \&angel, moose => \&moo, normal => \&normal, }); { my $angel = Angel->new(); $angel->load_mixin('Book'); my $moo = Moo->new(); $moo->load_plugin('Book'); my $normal = Normal->new(); cmpthese( 1000, { angelos => sub { $angel->reading }, moose => sub { $moo->reading } , normal => sub { $normal->reading } ,, }); } sub angel { my $angel = Angel->new(); $angel->load_mixin('Book'); $angel->reading(); } sub moo { my $moo = Moo->new(); $moo->load_plugin('Book'); $moo->reading(); } sub normal { my $normal = Normal->new(); $normal->reading(); }
angelos
package Angel; use Mouse; with 'Angelos::Class::Mixinable'; 1; package Angel::Mixin::Book; use Angelos::Mixin; sub reading { 'reading' } 1;
moose
package Moo; use Moose; with 'MooseX::Object::Pluggable'; 1; package Moo::Plugin::Book; use Moose::Role; sub reading { 'reading' } 1;
normal
package Normal; use warnings; use strict; sub new { my $class = shift; bless {}, $class; } sub reading { 'reading' } 1;
結果
Rate moose angelos normal moose 505/s -- -28% -100% angelos 704/s 39% -- -100% normal 999999999999999872/s 198000000000000000% 141999999999999984% -- Rate normal angelos moose normal 999999999999999872/s -- 0% 0% angelos 999999999999999872/s 0% -- 0% moose 999999999999999872/s 0% 0% --
ロードし終わったら全部なかよし。