2008-05-03
Mooseのパフォーマンス測定 Class::Accessor::Fast vs Moose
http://code2.0beta.co.uk/moose/svn/Moose/trunk/benchmarks/caf_vs_moose.pl
- setterは実行回数たりねーと怒られた.
- getterは大差なし
- インスタンス生成は、かなり差がある。最大100倍くらい遅い
- Destructionもかなり差がある
現状だとインスタンス作る場合には、mata->make_immutableしておいたほうがいいってこと。CGIで使うには無理がありそうだけど、そうじゃなきゃいけそうだなぁと。
DIコンテナでScopeをSingletonにしといて、startupタイミングでインスタンス作っとけば、実用上は問題ないかな。
hasとかで委譲したときに、どうなるかとかは測っておいたほうがいいかも。
SETTING
Benchmark: timing 100000 iterations of ClassAccessorFast, Moose, MooseImmutable, MooseImmutableNoConstructor...
ClassAccessorFast: 0.102277 wallclock secs ( 0.11 usr + 0.00 sys = 0.11 CPU) @ 909090.91/s (n=100000)
(warning: too few iterations for a reliable count)
Moose: 0.109756 wallclock secs ( 0.11 usr + 0.00 sys = 0.11 CPU) @ 909090.91/s (n=100000)
(warning: too few iterations for a reliable count)
MooseImmutable: 0.110045 wallclock secs ( 0.11 usr + 0.00 sys = 0.11 CPU) @ 909090.91/s (n=100000)
(warning: too few iterations for a reliable count)
MooseImmutableNoConstructor: 0.108017 wallclock secs ( 0.11 usr + 0.00 sys = 0.11 CPU) @ 909090.91/s (n=100000)
(warning: too few iterations for a reliable count)
Rate MooseImmutableNoConstructor MooseImmutable Moose ClassAccessorFast
MooseImmutableNoConstructor 909091/s -- 0% 0% -0%
MooseImmutable 909091/s 0% -- 0% -0%
Moose 909091/s 0% 0% -- -0%
ClassAccessorFast 909091/s 0% 0% 0% --
GETTING
Benchmark: timing 100000 iterations of ClassAccessorFast, Moose, MooseImmutable, MooseImmutableNoConstructor...
ClassAccessorFast: 0.0776682 wallclock secs ( 0.08 usr + 0.00 sys = 0.08 CPU) @ 1250000.00/s (n=100000)
(warning: too few iterations for a reliable count)
Moose: 0.0701921 wallclock secs ( 0.07 usr + 0.00 sys = 0.07 CPU) @ 1428571.43/s (n=100000)
(warning: too few iterations for a reliable count)
MooseImmutable: 0.0723972 wallclock secs ( 0.08 usr + 0.00 sys = 0.08 CPU) @ 1250000.00/s (n=100000)
(warning: too few iterations for a reliable count)
MooseImmutableNoConstructor: 0.0714548 wallclock secs ( 0.08 usr + 0.00 sys = 0.08 CPU) @ 1250000.00/s (n=100000)
(warning: too few iterations for a reliable count)
Rate MooseImmutable MooseImmutableNoConstructor ClassAccessorFast Moose
MooseImmutable 1250000/s -- -0% -0% -13%
MooseImmutableNoConstructor 1250000/s 0% -- 0% -12%
ClassAccessorFast 1250000/s 0% 0% -- -12%
Moose 1428571/s 14% 14% 14% --
CREATION
Benchmark: timing 100000 iterations of ClassAccessorFast, Moose, MooseImmutable, MooseImmutableNoConstructor...
ClassAccessorFast: 0.455661 wallclock secs ( 0.46 usr + 0.00 sys = 0.46 CPU) @ 217391.30/s (n=100000)
Moose: 50.7327 wallclock secs (50.71 usr + 0.03 sys = 50.74 CPU) @ 1970.83/s (n=100000)
MooseImmutable: 0.509074 wallclock secs ( 0.52 usr + 0.00 sys = 0.52 CPU) @ 192307.69/s (n=100000)
MooseImmutableNoConstructor: 7.42216 wallclock secs ( 7.41 usr + 0.01 sys = 7.42 CPU) @ 13477.09/s (n=100000)
Rate Moose MooseImmutableNoConstructor MooseImmutable ClassAccessorFast
Moose 1971/s -- -85% -99% -99%
MooseImmutableNoConstructor 13477/s 584% -- -93% -94%
MooseImmutable 192308/s 9658% 1327% -- -12%
ClassAccessorFast 217391/s 10930% 1513% 13% --
DESTRUCTION
Benchmark: timing 100000 iterations of ClassAccessorFast, Moose, MooseImmutable, MooseImmutableNoConstructor...
ClassAccessorFast: 0.0550349 wallclock secs ( 0.04 usr + 0.00 sys = 0.04 CPU) @ 2500000.00/s (n=100000)
(warning: too few iterations for a reliable count)
Moose: 0.299493 wallclock secs ( 0.30 usr + 0.00 sys = 0.30 CPU) @ 333333.33/s (n=100000)
(warning: too few iterations for a reliable count)
MooseImmutable: 0.149003 wallclock secs ( 0.16 usr + 0.00 sys = 0.16 CPU) @ 625000.00/s (n=100000)
(warning: too few iterations for a reliable count)
MooseImmutableNoConstructor: 0.142484 wallclock secs ( 0.14 usr + 0.00 sys = 0.14 CPU) @ 714285.71/s (n=100000)
(warning: too few iterations for a reliable count)
Rate Moose MooseImmutable MooseImmutableNoConstructor ClassAccessorFast
Moose 333333/s -- -47% -53% -87%
MooseImmutable 625000/s 87% -- -13% -75%
MooseImmutableNoConstructor 714286/s 114% 14% -- -71%
ClassAccessorFast 2500000/s 650% 300% 250% --
トラックバック - http://catalyst.g.hatena.ne.jp/dann/20080503
今の記述では'filetype'がperlなバッファを開かれた際に各種設定が全バッファに対して有効になります。特に:autocmdは'filetype'がperlなバッファを開くたびに同じものが追加されていくのでバッファの保存時に同じ動作が複数回行われることになります。