2016-01-12 15 views
10

Das Ausführen eines installierten Gems ist viel langsamer als das Ausführen des lokalen Quellengegenstücks.Installiertes Juwel viel langsamer als die Quelle

Installed gem:

$ time wmctile switch_to Thunderbird 

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

Lokale Quelle:

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

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

Warum? Könnte es wegen RVM sein, oder ist das ein "Feature" von Ruby Gems im Allgemeinen? Gibt es eine Möglichkeit, es zu beschleunigen?

EDIT: erzeugte bin-Datei

$ 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) 
+2

Ich bin sicher, es gibt einige Overhead in RVM herauszufinden, Ihre aktuelle Version von Ruby, die Binärdatei suchen und ausführen. Warum nicht einfach "wmctile" in Ihrem bash_profile an die Quelle anhängen? – Anthony

+1

Es ist ein verteiltes Juwel, das von anderen Benutzern verwendet werden soll und nur das Juwel und nicht die Quelle haben würde. – mreq

+1

@JesseSielaff Es ist reiner Rubin. Das Problem scheint in der generierten Datei zu liegen, '/ usr/bin/env ruby_executable_hooks' scheint ziemlich langsam zu sein. Ich habe die Antwort mit der Quelle der generierten Bin-Datei bearbeitet. – mreq

Antwort

0

RVM setzt die richtigen Verzeichnisse für Ihre Ruby-Version und gemset in den Weg, wenn der rvm Rubin eingestellt ist. Mein Weg beginnt mit diesem:

/Users/kbennett/.rvm/gems/ruby-2.3.0/bin 
/Users/kbennett/.rvm/gems/[email protected]/bin 
/Users/kbennett/.rvm/rubies/ruby-2.3.0/bin 
/Users/kbennett/.rvm/bin 

Also ich denke, es das Betriebssystem ist und Ruby selbst nicht, dass für die Verzögerung verantwortlich ist. Sie können dies testen, indem Sie eine einfache Shell-Skriptdatei in dieses gem bin-Verzeichnis schreiben und sie mit und ohne ihre absolute Position aufrufen, um zu sehen, ob Sie den gleichen Unterschied erhalten.

Verwandte Themen