App::Benchmark::Accessorsでアクセッサのベンチマーク
App::Benchmark::AccessorsにMouseのmake_immutableを追加してはかってみた(hanecomさんには、パッチは送り済み。)。マニアックなものがやたらに含まれているので、結果は自分が必要な物だけ抜粋。
大体直感的にはあうんだけど、Mouseはgetter, setterともはimmutableのほうが遅いっていうのが直感とあわないな。
getter
# Rate mojo moose mouse_immutable mouse moose_immutable class_accessor_fast class_accessor_fast_xs class_xsaccessor class_xsaccessor_array # mojo 974659/s -- -15% -19% -23% -23% -24% -50% -58% -61% # moose 1146789/s 18% -- -5% -9% -9% -11% -42% -51% -54% # mouse_immutable 1201923/s 23% 5% -- -5% -5% -6% -39% -49% -52% # mouse 1262626/s 30% 10% 5% -- -0% -2% -36% -46% -49% # moose_immutable 1262626/s 30% 10% 5% 0% -- -2% -36% -46% -49% # class_accessor_fast 1282051/s 32% 12% 7% 2% 2% -- -35% -45% -49% # class_accessor_fast_xs 1968504/s 102% 72% 64% 56% 56% 54% -- -16% -21% # class_xsaccessor 2336449/s 140% 104% 94% 85% 85% 82% 19% -- -7% # class_xsaccessor_array 2500000/s 157% 118% 108% 98% 98% 95% 27% 7% --
setter
# Rate moose moose_immutable mojo class_accessor_fast mouse_immutable mouse class_xsaccessor class_xsaccessor_array class_accessor_fast_xs # moose 821355/s -- -1% -3% -14% -22% -32% -53% -60% -60% # moose_immutable 833333/s 1% -- -2% -13% -21% -31% -53% -59% -59% # mojo 847458/s 3% 2% -- -11% -19% -30% -52% -58% -59% # class_accessor_fast 954654/s 16% 15% 13% -- -9% -21% -46% -53% -53% # mouse_immutable 1049869/s 28% 26% 24% 10% -- -13% -40% -49% -49% # mouse 1204819/s 47% 45% 42% 26% 15% -- -31% -41% -41% # class_xsaccessor 1754386/s 114% 111% 107% 84% 67% 46% -- -14% -14% # class_xsaccessor_array 2040816/s 148% 145% 141% 114% 94% 69% 16% -- -1% # class_accessor_fast_xs 2051282/s 150% 146% 142% 115% 95% 70% 17% 1% --
# mouseがclass_accessor_fastと同等の速度程度がでているかというのだけ確認しときたかったのでした。
# hasの実装だと、mouse_immutableもmouseも実行速度がかわるはずないな... ということで、ベンチの結果は単なる誤差だなぁ。