Skip to content

Optimize dependency matching#586

Merged
drbrain merged 0 commit into
ruby:masterfrom
sullerandras:master
Jul 16, 2013
Merged

Optimize dependency matching#586
drbrain merged 0 commit into
ruby:masterfrom
sullerandras:master

Conversation

@sullerandras

Copy link
Copy Markdown
Contributor

When searching for a specific name, we can just do a binary search to find the gems by their name, instead of iterating thru all the gems (which takes a long time, since there are over 320,000 gem versions).
To do this, we need to sort the tuples by name, which is just a little overhead.

Motivation:
Gem update took 32 seconds on my machine, when there was nothing to update, only to check if there is a newer version.
With the optimized version, it dropped down to 2 seconds.

What do you guys think?

@drbrain

drbrain commented Jul 8, 2013

Copy link
Copy Markdown
Member

I like this change overall.

Can you use Array#bsearch if it is available (Ruby 2.0.0+)?

Can you move your binary search implementation to a utility method? #search_for_dependency is already a very long method and that we're performing a binary search in the middle of it is not obvious.

Why freeze the result of latest_specs?

@evanphx

evanphx commented Jul 13, 2013

Copy link
Copy Markdown
Member

What's with the calls to dup and freeze? Those don't seem related to the search change.

@sullerandras

Copy link
Copy Markdown
Contributor Author

Sorry guys, I messed up the commit for this pull request.

Please delete this pull request and review the new one: #595

@drbrain drbrain merged commit 883065c into ruby:master Jul 16, 2013
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants