Skip to content

Instantly share code, notes, and snippets.

@aero
Created April 28, 2012 00:48
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aero/2514726 to your computer and use it in GitHub Desktop.
Save aero/2514726 to your computer and use it in GitHub Desktop.
Moose vs Mouse vs Moo vs Mo (Loading/Object Creation/Getter/Setter) benchmark
Date: 2012-04-28
Moose 2.0403
Mouse 0.97
Moo 0.091 + Class::XSAccessor 1.13
Mo 0.31
* Loading
time perl -e 'use Moose;'
time perl -e 'use Mouse;'
time perl -e 'use Moo;'
time perl -e 'use Mo;'
Moose real 0m0.250s user 0m0.208s sys 0m0.032s
Mouse real 0m0.035s user 0m0.016s sys 0m0.012s
Moo real 0m0.041s user 0m0.016s sys 0m0.024s
Mo real 0m0.008s user 0m0.000s sys 0m0.000s
* Object Creation
perl -MBenchmark -e '{package M;use Moose; has a => (is=>"rw",default =>sub{1});__PACKAGE__->meta->make_immutable;} timethese(1000000, {test => sub { my $o=M->new }})'
perl -MBenchmark -e '{package M;use Mouse; has a => (is=>"rw",default =>sub{1});__PACKAGE__->meta->make_immutable;} timethese(1000000, {test => sub { my $o=M->new }})'
perl -MBenchmark -e '{package M;use Moo; has a => (is=>"rw",default =>sub{1});} timethese(1000000, {test => sub { my $o=M->new }})'
MOO_XS_DISABLE=1 perl -MBenchmark -e '{package M;use Moo; has a => (is=>"rw",default =>sub{1});} timethese(1000000, {test => sub { my $o=M->new }})'
perl -MBenchmark -e '{package M;use Mo; has a => (is=>"rw",default =>sub{1});} timethese(1000000, {test => sub { my $o=M->new }})'
perl -MBenchmark -e '{package M;use Mo qw/xs/; has a => (is=>"rw",default =>sub{1});} timethese(1000000, {test => sub { my $o=M->new }})'
Moose 6 wallclock secs ( 5.12 usr + 0.00 sys = 5.12 CPU) @ 195312.50/s (n=1000000)
Mouse 3 wallclock secs ( 2.87 usr + 0.00 sys = 2.87 CPU) @ 348432.06/s (n=1000000)
Moo 3 wallclock secs ( 2.36 usr + 0.00 sys = 2.36 CPU) @ 423728.81/s (n=1000000)
Moo MOO_XS_DISABLE=1 3 wallclock secs ( 2.32 usr + 0.00 sys = 2.32 CPU) @ 431034.48/s (n=1000000)
Mo 1 wallclock secs ( 0.79 usr + 0.00 sys = 0.79 CPU) @ 1265822.78/s (n=1000000)
Mo xs 1 wallclock secs ( 0.79 usr + 0.00 sys = 0.79 CPU) @ 1265822.78/s (n=1000000)
*Getter
perl -MBenchmark -e '{package M;use Moose; has a => (is=>"rw",default =>sub{1});__PACKAGE__->meta->make_immutable;} my $o=M->new; timethese(1000000, {test => sub { my $v = $o->a }})'
perl -MBenchmark -e '{package M;use Mouse; has a => (is=>"rw",default =>sub{1});__PACKAGE__->meta->make_immutable;} my $o=M->new; timethese(1000000, {test => sub { my $v = $o->a }})'
perl -MBenchmark -e '{package M;use Moo; has a => (is=>"rw",default =>sub{1});} my $o=M->new; timethese(1000000, {test => sub { my $v = $o->a }})'
MOO_XS_DISABLE=1 perl -MBenchmark -e '{package M;use Moo; has a => (is=>"rw",default =>sub{1});} my $o=M->new; timethese(1000000, {test => sub { my $v = $o->a }})'
perl -MBenchmark -e '{package M;use Mo; has a => (is=>"rw",default =>sub{1});} my $o=M->new; timethese(1000000, {test => sub { my $v = $o->a }})'
perl -MBenchmark -e '{package M;use Mo qw/xs/; has a => (is=>"rw",default =>sub{1});} my $o=M->new; timethese(1000000, {test => sub { my $v = $o->a }})'
Moose 0 wallclock secs ( 0.42 usr + 0.00 sys = 0.42 CPU) @ 2380952.38/s (n=1000000)
Mouse 1 wallclock secs ( 0.13 usr + 0.00 sys = 0.13 CPU) @ 7692307.69/s (n=1000000)
Moo -1 wallclock secs ( 0.12 usr + 0.00 sys = 0.12 CPU) @ 8333333.33/s (n=1000000)
Moo MOO_XS_DISABLE=1 1 wallclock secs ( 0.41 usr + 0.00 sys = 0.41 CPU) @ 2439024.39/s (n=1000000)
Mo -1 wallclock secs ( 0.46 usr + 0.00 sys = 0.46 CPU) @ 2173913.04/s (n=1000000)
Mo xs -1 wallclock secs ( 0.11 usr + 0.00 sys = 0.11 CPU) @ 9090909.09/s (n=1000000)
*Setter
perl -MBenchmark -e '{package M;use Moose; has a => (is=>"rw",default =>sub{1});__PACKAGE__->meta->make_immutable;} my $o=M->new; timethese(1000000, {test => sub { $o->a(5) }})'
perl -MBenchmark -e '{package M;use Mouse; has a => (is=>"rw",default =>sub{1});__PACKAGE__->meta->make_immutable;} my $o=M->new; timethese(1000000, {test => sub { $o->a(5) }})'
perl -MBenchmark -e '{package M;use Moo; has a => (is=>"rw",default =>sub{1});} my $o=M->new; timethese(1000000, {test => sub { $o->a(5) }})'
MOO_XS_DISABLE=1 perl -MBenchmark -e '{package M;use Moo; has a => (is=>"rw",default =>sub{1});} my $o=M->new; timethese(1000000, {test => sub { $o->a(5) }})'
perl -MBenchmark -e '{package M;use Mo; has a => (is=>"rw",default =>sub{1});} my $o=M->new; timethese(1000000, {test => sub { $o->a(5) }})'
perl -MBenchmark -e '{package M;use Mo qw/xs/; has a => (is=>"rw",default =>sub{1});} my $o=M->new; timethese(1000000, {test => sub { $o->a(5) }})'
Moose 0 wallclock secs ( 0.42 usr + 0.00 sys = 0.42 CPU) @ 2380952.38/s (n=1000000)
Mouse 1 wallclock secs ( 0.09 usr + 0.00 sys = 0.09 CPU) @ 11111111.11/s (n=1000000)
Moo 1 wallclock secs ( 0.13 usr + 0.00 sys = 0.13 CPU) @ 7692307.69/s (n=1000000)
Moo MOO_XS_DISABLE=1 -1 wallclock secs ( 0.42 usr + 0.00 sys = 0.42 CPU) @ 2380952.38/s (n=1000000)
Mo 0 wallclock secs ( 0.39 usr + 0.00 sys = 0.39 CPU) @ 2564102.56/s (n=1000000)
Mo xs 1 wallclock secs ( 0.12 usr + 0.00 sys = 0.12 CPU) @ 8333333.33/s (n=1000000)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment