bless と Mouse、あとClass::Accessor::Lite でオブジェクトを作る際の性能比較
巷で「爆速! ヤバすぎ!」と目下話題の Mouse ですが、「bless でオブジェクト作るよりも速い」という風なことがちらほら聞こえて参りましたので、そこら辺を比較してみました。
今回は生 bless と、Mouse、そして参考として Class::Accessor::Lite の3つを比較しました。
なお、Perl のバージョンは 5.16.3、Mouse のバージョンは1.11、C::A::Lite のバージョンは0.05 でお届けして参ります。
比較に利用したのは以下のコードです。
かくして結果はこのようになり、流石に bless よりも速いという結果は得られませんでしたが、Class::Accessor::Lite よりかは高速ということで Mouse すごい、という感じですね。
しかしながら、上記のコードを以下のように書き換えると (わかりにくい! との指摘を受けましたので補足しますと、上記コードに対してs/1/one/g, s/2/two/g ... を適用して書き換えたものです) また結果は変わってきて......
この場合は Mouse が一番遅い結果となりました。
場合によってオブジェクトを生成するのに要する時間が変わってくるようです。
(有識者の方、この辺りの理由を教えていただけたら嬉しいです)
今回は Mouse の他の機能 (型の指定だったり、デフォルト値の設定だったり、遅延読み込みだったり、required だったり) を使わないベンチだったので、これらの機能を使うとまた違った結果が得られるかもしれませんね。
ただ、まあ Mouse 便利だし普通に速いしで、使うと幸せな気分になって良いです!!
[追記 1]
@moznion アクセサがクソ速い
— songmu (@songmu) 2013, 8月 13
オブジェクト生成よりもアクセサがクソ速いそうです
Mouse、やっぱり速さおかしい