Notice it gets much worse with rails loaded. Anyone got a fix, or know why this is happening? cg5[20:55] development > ruby -v ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0] cg5[20:51] development > irb irb(main):001:0> require ''benchmark'' => true irb(main):002:0> n = 5000 => 5000 irb(main):003:0> m1 = Module.new => #<Module:0x5d6c54> irb(main):004:0> module M2; end => nil irb(main):005:0> Benchmark.bm do |x| irb(main):006:1* x.report { n.times do m1.name end } irb(main):007:1> x.report { n.times do M2.name end } irb(main):008:1> end user system total real 1.710000 0.050000 1.760000 ( 2.807539) 0.010000 0.000000 0.010000 ( 0.005157) => true irb(main):009:0> ^Dcg5[20:51] development > script/console Loading development environment (Rails 2.0.2)>> require ''benchmark''=> []>> n = 5000=> 5000>> m1 = Module.new=> #<Module:0x205c308>>> module M2; end=> nil>> Benchmark.bm do |x|?> x.report { n.times do m1.name end }>> x.report { n.times do M2.name end } >> enduser system total real 14.120000 0.630000 14.750000 ( 28.017196) 0.000000 0.000000 0.000000 ( 0.010137) => true>>-- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Looks like the code changed in edge rails, but as a temporary patch do this one line change in environment.rb which avoids calling Module#name if there is no name: module ActionView module Helpers module PrototypeHelper class JavaScriptGenerator def include_helpers_from_context @context.extended_by.each do |mod| extend mod unless defined?(mod) == ''constant'' && mod.name =~ /^ActionView::Helpers/ end extend GeneratorMethods end end end end end -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Sep 30, 4:58 am, Elliot Temple <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> Notice it gets much worse with rails loaded. Anyone got a fix, or know > why this is happening?I don''t think it is Rails'' fault (at least not directly). I ran the test you ran and got: user system total real 0.710000 0.010000 0.720000 ( 0.715909) 0.010000 0.000000 0.010000 ( 0.013030) Then I ran ''Aaaa''.upto(''Azzz'') { |x| Object.const_set(x, ''1''), ie I generated 20000 or so extra constants and reran the benchmarks and got 22.300000 0.250000 22.550000 ( 23.584470) 0.000000 0.000000 0.000000 ( 0.005260) Adding the same number of constants again doubles those numbers - it would appear that there is something in ruby that makes Module#name linear in the number of constants set in the case where the name is unset So I don''t think Rails is doing anything that makes this worse, other than defining a whole bunch of constants Fred> > cg5[20:55] development > ruby -v > ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0] > cg5[20:51] development > irb > irb(main):001:0> require ''benchmark'' > => true > irb(main):002:0> n = 5000 > => 5000 > irb(main):003:0> m1 = Module.new > => #<Module:0x5d6c54> > irb(main):004:0> module M2; end > => nil > irb(main):005:0> Benchmark.bm do |x| > irb(main):006:1* x.report { n.times do m1.name end } > irb(main):007:1> x.report { n.times do M2.name end } > irb(main):008:1> end > user system total real > 1.710000 0.050000 1.760000 ( 2.807539) > 0.010000 0.000000 0.010000 ( 0.005157) > => true > irb(main):009:0> ^Dcg5[20:51] development > script/console > Loading development environment (Rails 2.0.2)>> require ''benchmark'' > => [] > >> n = 5000 > => 5000 > >> m1 = Module.new > > => #<Module:0x205c308>>> module M2; end > => nil > >> Benchmark.bm do |x| > > ?> x.report { n.times do m1.name end }>> x.report { n.times do M2.name end } > >> end > > user system total real > 14.120000 0.630000 14.750000 ( 28.017196) > 0.000000 0.000000 0.000000 ( 0.010137) > => true > > -- > Posted viahttp://www.ruby-forum.com/.--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---