mreq
mreq

Reputation: 6542

Installed gem much slower than source

Running an installed gem is much slower than running its local source counterpart.

Installed gem:

$ time wmctile switch_to Thunderbird

real  0m0.682s
user  0m0.491s
sys 0m0.091s

Local source:

$ time ./work/wmctile/bin/wmctile switch_to Thunderbird

real  0m0.197s
user  0m0.118s
sys 0m0.064s

Why? Could it be because of RVM, or is this a "feature" of Ruby gems in general? Is there a way to speed it up?

This is the generated bin file:

$ which wmctile
/home/some_user_name/.rvm/gems/ruby-2.1.2/bin/wmctile

$ cat $( which wmctile )
#!/usr/bin/env ruby_executable_hooks
#
# This file was generated by RubyGems.
#
# The application 'wmctile' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first
  str = ARGV.first
  str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding
  if str =~ /\A_(.*)_\z/ and Gem::Version.correct?($1) then
    version = $1
    ARGV.shift
  end
end

gem 'wmctile', version
load Gem.bin_path('wmctile', 'wmctile', version)

Upvotes: 11

Views: 343

Answers (1)

Keith Bennett
Keith Bennett

Reputation: 4970

RVM puts the proper directories for your Ruby version and gemset in the path whenever the RVM Ruby is set. My PATH begins with this:

/Users/kbennett/.rvm/gems/ruby-2.3.0/bin
/Users/kbennett/.rvm/gems/ruby-2.3.0@global/bin
/Users/kbennett/.rvm/rubies/ruby-2.3.0/bin
/Users/kbennett/.rvm/bin

So, I think it's the OS and not Ruby itself that is responsible for the delay. You could test this by putting a simple shell script file in that gem bin directory, and calling it with and without its absolute location to see if you get the same difference.

Upvotes: 1

Related Questions