For the most part, Moose is pretty well optimized for runtime operations. If you make a class immutable, your constructor will be as fast as it can be. Similarly, attributes are always inlined with the most optimal code we can generate.
However, I've been doing some profiling recently of some of my Moose-using modules, and I've found some areas for improvement.
The 1.13 release addresses one of these. Previously, calls to $object->does() were fairly slow, especially for classes with a bunch of roles or deep inheritance hierarchies. The does() method ended up looking up roles in the metaclass object, and it did this in a really slow way.
With 1.13, all of a class's roles are captured in a hash, and we can look up any role in the time it takes to look up a hash key. If your app makes a lot of calls to does() then this might help. Note that calls to does can happen behind the scenes with any sort of role-based type constraint.
Next up on my list are native traits. It turns out that the code which implements these often goes through some really slow paths in Moose. I'm going to make all native traits inlined as well. In the best case, that will generate code like push @{ $self->{foo} }, @_, which will be much faster than what we do now.
