Skip to content

Instantly share code, notes, and snippets.

@josevalim
Created December 6, 2011 11:54
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save josevalim/1437939 to your computer and use it in GitHub Desktop.
Save josevalim/1437939 to your computer and use it in GitHub Desktop.
Potentially faster boot
# THANKS EVERYONE FOR YOUR BELOVED BENCHMARKS.
# THIS PATCH IS NOW IN RAILS:
#
# https://github.com/rails/rails/commit/885a599303585b796da7a0a1c3ccd0bc5c642134
# Please add the following lines after Bundler.require
# and before "class Application < Rails::Application"
# in your config/application.rb
#
# Notice this is just an experiment, don't leave those
# lines there after the experiment. Then please benchmark
# your app boot time in development before and after adding
# those lines. A simple benchmark is:
#
# time script/rails runner "MODEL"
#
# Where MODEL is a model available in your app. Also,
# please run the command above at least three times to
# ensure we don't have fake samples. :)
#
# Please post the results in the comments below of the
# benchmarks before and after adding the code. <3
#
# This patch should work on Rails 3.0, 3.1 and master.
#
# Extra: if you could run your app in development and
# production (in your machine!!) with this patch on
# for a couple minutes and report any errors, you will
# win extra <3 <3 <3.
require "active_support/dependencies"
ActiveSupport::Dependencies::WatchStack.class_eval do
def watching?
!@watching.empty?
end
end
def load_dependency(file)
if ActiveSupport::Dependencies.load? && ActiveSupport::Dependencies.constant_watch_stack.watching?
ActiveSupport::Dependencies.new_constants_in(Object) { yield }
else
yield
end
rescue Exception => exception # errors from loading file
exception.blame_file! file
raise
end
@johnmcaliley
Copy link

Rails 3.0.10
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.1.0]

Before:

 real    0m38.392s
 user    0m35.857s
 sys     0m2.511s

After:

 real    0m36.849s
 user    0m34.325s
 sys     0m2.443s 

Same app with ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.1.0]

Before:

 real    0m17.713s 
 user    0m14.797s
 sys     0m1.444s

After:

 real    0m15.556s
 user    0m14.086s
 sys     0m1.400s

@josevalim
Copy link
Author

Thanks everyone for your beloved benchmarks. This patch is now in Rails:

rails/rails@885a599

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment