2016-01-12 31 views
10

Uruchamianie zainstalowanego klejnotu jest znacznie wolniejsze niż uruchomienie lokalnego odpowiednika źródła.Zainstalowany klejnot o wiele wolniejszy od źródła

gem zainstalowane:

$ time wmctile switch_to Thunderbird 

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

źródło lokalny:

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

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

Dlaczego? Czy to możliwe z powodu RVM, czy też jest to "cecha" klejnotów rubinowych? Czy istnieje sposób na przyspieszenie?

EDIT: wygenerowany plik bin

$ 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

Jestem pewna, że ​​w RVM jest trochę narzutów na szukanie aktualnej wersji ruby, lokalizowanie pliku binarnego i wykonywanie go. Dlaczego nie tylko alias 'wmctile' w twoim bash_profile do źródła? – Anthony

+1

Jest to rozproszony klejnot przeznaczony dla innych użytkowników, który miałby tylko klejnot, a nie jego źródło. – mreq

+1

@JesseSielaff To jest czysty rubin. Problem pojawia się w wygenerowanym pliku, '/ usr/bin/env ruby_executable_hooks' wydaje się być dość wolny. Edytowałem odpowiedź ze źródłem wygenerowanego pliku bin. – mreq

Odpowiedz

0

RVM stawia odpowiednie katalogi dla wersji Ruby i gemset w ścieżce gdy rubin RVM jest ustawiony. Moja ścieżka zaczyna się od tego:

/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 

Uważam, że za opóźnienie odpowiada system operacyjny, a nie sama Ruby. Możesz to przetestować, umieszczając prosty plik skryptu powłoki w tym katalogu bin bin i wywołując go z absolutną lokalizacją i bez niej, aby zobaczyć, czy dostaniesz tę samą różnicę.