Speed up pry require with autoloading #2250
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
馃憢 I noticed pry-rails was taking a little while to load during boot time of my app:
This is because it loads pry and pry-byebug. However, the bulk of the time is spent loading pry itself. I thought using autoload and some lazy evaluation could speed up the load time for the library. I also added the following optimizations:
Pry::Config
(because previously it was being created inPry.init
which would load most of pry at require time).Pry::Command::Ls::DEFAULT_OPTIONS
toPry::Config::DEFAULT_LS_OPTIONS
(the constant didn't seem to be used by the Ls command class, so it made more sense to include inPry::Config
to avoid loading commands early).pry/commands
and require it on initial session load. This might not be the most ideal solution, but the command classes shouldn't need to be loaded until pry is started.You can verify the speed improvement with a simple benchmarking script:
Before the patch, this took about
100ms
, and now it is down to~20ms
. If this is a good direction for pry, I'd also like to changepry-rails
to delay loading its commands. This require seems unnecessary when there's one already in the console block of the railtie.