2009年6月23日星期二

[PerlChina] Re: 求类似Class::Accessor的推荐模块

呵呵,其实 runtime 的开销在大多数情况下比较有价值,另外,你代码中有个地方有问题,可能是你最近改的时候出的问题,你第一版给我的时候我没发现
------

my $accessor_code = q!unuse(qr/^Class\//);eval {package FooC;use base "Class::Accessor";__PACKAGE__->mk_accessors(qw/x y/);}!;

------
注意这儿的红色 eval { , 应该改成 eval q{ , 不然的话,和其他 code 比就不公平了
eval {} 后面是block, 只在 runtime 解析一次,而 eval q{} 后面这个 expr 每次都解析,直接导致了 $accessor_code 测试结果更快更好。

另外,你贴的结果中:
------

 Class::Accessor       50000/s 27233%             1917%                  450%              --

----
应该是有些问题,可能是你运行测试脚本的时候,$accessor_code 的 eval 中存在某个语法错误导致测试结果如上所示。
但是你给出的 http://agentzh.org/misc/accessor_bench.pl 却是修正后的脚本,所以我猜你自己再运行一遍得到的结果肯定不会是
50000/s :-)

类似 App::Benchmark::Accessors 的 runtime 结果: http://is.gd/1bxSq


2009/6/24 agentzh <agentzh@gmail.com>
On 6/22/09, Don Qin <icefishc@gmail.com> wrote:
一直以为Moose很慢。 今天作了个benchmark 发现速度还是相当不错的 快于Class::Accessor 比Class::Accessor::Fast稍慢。 
测试基于Class::Accessor中自带的那个example

呃。。。你没有晒出你的 benchmark 脚本,所以不太确定你测试的是 BEGIN time 的还是 runtime 的性能,呵呵。

Moose 的运行时性能是极好的,因为它把 sugar 都尽可能“编译”成了 perl runtime 中的 primitive,所以我看到你的结果并不感到吃惊。于是我着重测试了一下 BEGIN time 即加载启动时的开销:

                          Rate  Moose Class::XSAccessor Class::Accessor::Fast Class::Accessor
 Moose                  41.1/s     --              -92%                 -100%           -100%
 Class::XSAccessor       539/s  1209%                --                  -94%            -98%
 Class::Accessor::Fast  8824/s 21344%             1538%                    --            -62%
 Class::Accessor       23077/s 55985%             4185%                  162%              --

这一组测试同时考虑了 use 本身的开销,测试脚本在这里:

    http://agentzh.org/misc/accessor_bench.pl

这里 Moose 最慢,我不感到意外,但其他 3 项的顺序似乎和我期望中的刚好反置了,哈哈!欢迎大家指正我评测本身的错误 :P

如果将脚本中的 $ENABLE_UNUSE 变量置为 0,即不包含 use 本身的开销的话,结果是类似的(主要变化是大家一起变快了,因为都只需要 use 一次了):

                          Rate  Moose Class::XSAccessor Class::Accessor::Fast Class::Accessor
 Moose                   183/s     --              -93%                  -98%           -100%
 Class::XSAccessor      2479/s  1255%                --                  -73%            -95%
 Class::Accessor::Fast  9091/s  4870%              267%                    --            -82%
 Class::Accessor       50000/s 27233%             1917%                  450%              --

各模块的版本号:

 Class::Accessor 0.33
 Class::Accessor::Fast 0.33
 Class::XSAccessor 1.03
 Moose 0.83

perl 版本 5.10.0.
 
当然,对于那些长驻于内存中运行很长时间的应用来说,启动速度不是那么重要了,呵呵 :)

Cheers,
-agentzh





--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

没有评论: