faster_rubygems 0.9.2 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +34 -19
- data/Rakefile +10 -1
- data/VERSION +1 -1
- data/benchmarks.txt +52 -29
- data/ext/mkrf_conf.rb +12 -0
- data/lib/faster_rubygems/my_gem_prelude.rb +7 -7
- data/lib/faster_rubygems/override.rb +1 -0
- data/lib/faster_rubygems/prelude_cached_load.rb +6 -6
- data/lib/faster_rubygems/prelude_create_cache.rb +10 -3
- data/lib/faster_rubygems/unoverride.rb +1 -0
- data/lib/rubygems_plugin.rb +10 -3
- data/spec/files/test_load_sub.rb +3 -0
- data/spec/spec.faster_rubygems.rb +1 -2
- data/spec/{spec.can_create_cache_file.rb → spec.uses_cache_files.rb} +1 -2
- metadata +34 -12
- data/lib/faster_rubygems_with_faster_require_too.rb +0 -2
- data/spec/reload.rb +0 -4
- data/things_prelude_needs.txt +0 -2
data/README
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
= Faster Rubygems =
|
2
|
+
|
1
3
|
A helper gem to dramatically speedup the time it takes to startup a ruby script.
|
2
4
|
|
3
5
|
i.e. it makes it so that requiring rubygems no longer takes as long.
|
@@ -7,18 +9,18 @@ Speed difference (a demo gem script, ruby 1.8 windows mingw):
|
|
7
9
|
normal rubygems:
|
8
10
|
|
9
11
|
$ timer ruby whichr
|
10
|
-
0.
|
12
|
+
0.83s
|
11
13
|
|
12
14
|
with faster_rubygems:
|
13
15
|
|
14
16
|
$ timer ruby whichr
|
15
|
-
0.
|
17
|
+
0.19s
|
16
18
|
|
17
19
|
Yea!
|
18
20
|
|
19
|
-
It acts
|
21
|
+
It acts like a beefed up version of gem_prelude (prelude is 1.9 only currently), with a bit more cacheing thrown in there.
|
20
22
|
|
21
|
-
It makes even more of a difference when used with 1.9:
|
23
|
+
It makes even more of a difference when used with 1.9 on windows:
|
22
24
|
|
23
25
|
normal rubygems:
|
24
26
|
|
@@ -34,33 +36,46 @@ with faster_rubygems:
|
|
34
36
|
|
35
37
|
$ gem install faster_rubygems
|
36
38
|
|
39
|
+
now there is a manual step that must be followed:
|
40
|
+
|
37
41
|
1.9
|
38
|
-
|
39
|
-
|
42
|
+
|
43
|
+
Set this environment variable:
|
44
|
+
RUBYOPT=-rfaster_rubygems --disable-gems
|
40
45
|
|
41
46
|
1.8:
|
47
|
+
Installs itself by default.
|
48
|
+
|
49
|
+
|
50
|
+
Note that full rubygems will still be loaded when necessary (for example when installing new gems). This is automatic.
|
51
|
+
|
42
52
|
|
43
|
-
|
53
|
+
== Rails ==
|
44
54
|
|
45
|
-
|
46
|
-
|
55
|
+
Unfortunately this gem does not greatly speed up rails--it speeds up any script that
|
56
|
+
doesn't require full rubygems (which is most, but not rails).
|
47
57
|
|
48
|
-
|
49
|
-
|
50
|
-
|
58
|
+
If you want to speed up rails, you'll want to use the faster_require gem
|
59
|
+
(though they do work together splendidly). http://github.com/rdp/faster_require
|
60
|
+
|
61
|
+
See http://github.com/rdp/faster_rubygems/blob/master/benchmarks.txt for a full breakdown and more benchmarks.
|
62
|
+
|
63
|
+
== Trouble Shooting ==
|
64
|
+
|
65
|
+
# if you wish to revert back to normal rubygems, do the following:
|
66
|
+
>> require 'rubygems'
|
67
|
+
>> require 'faster_rubygems/unoverride'
|
51
68
|
|
52
|
-
|
53
|
-
|
69
|
+
If all else fails in this process (it has typically worked fine), you can
|
70
|
+
reinstall normal rubygems by downloading its package (.tgz) and running ruby setup.rb within it.
|
54
71
|
|
55
|
-
After installation, usage is automatic.
|
56
72
|
|
73
|
+
To regenerate cache files (should never really be necessary, but if you for some reason think yours are stale) do the following:
|
57
74
|
|
58
|
-
To regenerate cache files (should never be necessary, but if you for some reason think yours are stale) do
|
59
75
|
>> require 'rubygems'
|
60
76
|
>> require 'faster_rubygems/create_cache_for_all'
|
61
77
|
|
62
|
-
|
63
|
-
Most of the credit for this goes to gem prelude.
|
78
|
+
Most of the credit for this gem goes to gem prelude.
|
64
79
|
|
65
80
|
== Related projects ==
|
66
81
|
|
@@ -72,4 +87,4 @@ the Builder gem
|
|
72
87
|
|
73
88
|
Source/feedback:
|
74
89
|
|
75
|
-
http://www.github.com/rdp/faster_rubygems
|
90
|
+
http://www.github.com/rdp/faster_rubygems
|
data/Rakefile
CHANGED
@@ -7,13 +7,22 @@ require 'jeweler'
|
|
7
7
|
|
8
8
|
s.post_install_message = "
|
9
9
|
|
10
|
-
faster_rubygems installed
|
10
|
+
faster_rubygems installed into your site_ruby directory.
|
11
|
+
|
12
|
+
If you're on 1.9 please set your RUBYOPT env. variable thus, to use it:
|
13
|
+
|
14
|
+
$ export RUBYOPT=--disable-gems -rfaster_rubygems
|
15
|
+
|
16
|
+
or (windows)
|
17
|
+
|
18
|
+
C:\>set RUBYOPT=--disable-gems -rfaster_rubygems
|
11
19
|
|
12
20
|
"
|
13
21
|
s.add_development_dependency 'test-unit', '=1.2.3'
|
14
22
|
s.add_development_dependency 'test-unit', '=2.0.6'
|
15
23
|
s.add_development_dependency 'after', '=0.7.0'
|
16
24
|
s.add_development_dependency 'sane'
|
25
|
+
s.add_development_dependency 'rspec', '>=2.0.0'
|
17
26
|
# s.add_dependency 'faster_require'
|
18
27
|
|
19
28
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.11.1
|
data/benchmarks.txt
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
|
1
|
+
Benchmarks against normal rubygems and gem_prelude in 1.9 (its normal)
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
benchmarks runing [$ whichr whichr] (the whichr gem just behaves like the "which" command in Linux), best time seen:
|
2
6
|
|
3
7
|
mingw 1.8
|
4
8
|
|
@@ -22,50 +26,69 @@ mingw 1.9
|
|
22
26
|
faster_rubygems without cache:
|
23
27
|
0.50
|
24
28
|
|
25
|
-
jruby,
|
29
|
+
jruby, 1.8 mode
|
26
30
|
|
27
|
-
|
31
|
+
normal rubygems:
|
32
|
+
2.31
|
33
|
+
|
34
|
+
faster_rubygems without cache (deleted the cache file temporarily to force it to not use it):
|
28
35
|
1.15
|
29
36
|
|
30
37
|
faster_rubygems with cache:
|
31
38
|
1.11
|
32
39
|
|
33
|
-
normal rubygems:
|
34
|
-
2.31
|
35
|
-
|
36
40
|
|
37
|
-
|
38
|
-
rails
|
41
|
+
rails 2.3.8 [ $ ruby script\runner -e production "puts 3" ]
|
42
|
+
Unfortunately rails requires a load of full rubygems. So currently faster_rubygems doesn't help it much.
|
39
43
|
|
40
|
-
|
44
|
+
faster_require (other gem) seems to help, however.
|
41
45
|
|
42
46
|
1.9
|
43
|
-
|
44
|
-
|
47
|
+
normal gem_prelude[RUBYOPT=]
|
48
|
+
20.85
|
49
|
+
|
50
|
+
faster_rubygems without cache [RUBYOPT=-rfaster_rubygems]
|
51
|
+
20.7
|
52
|
+
|
53
|
+
faster_rubygems with cache [RUBYOPT=-rfaster_rubygems --disable-gems]:
|
54
|
+
12.10
|
45
55
|
|
46
|
-
|
47
|
-
|
56
|
+
normal gem_prelude, with faster_require gem [RUBYOPT=-rfaster_require]:
|
57
|
+
8.93
|
48
58
|
|
49
|
-
|
50
|
-
|
59
|
+
faster_rubygems, without cache, with faster_require [RUBYOPT=-rfaster_rubygems -rfaster_require]:
|
60
|
+
8.99
|
51
61
|
|
52
|
-
|
53
|
-
10.41
|
54
|
-
|
55
|
-
rails 2.3.8 [ $ ruby script\runner -e production "puts 3" ]
|
62
|
+
* recommend this configuration for ruby 1.9 and rails.
|
56
63
|
|
57
|
-
|
58
|
-
|
59
|
-
|
64
|
+
faster_rubygems, with cache [RUBYOPT=--disable-gems -rfaster_rubygems -rfaster_require]
|
65
|
+
fail (gotta fix that, then will probably be fastest option)
|
66
|
+
|
67
|
+
1.8
|
68
|
+
|
69
|
+
normal rubygems:
|
70
|
+
6.54
|
71
|
+
|
72
|
+
faster_rubygems without cache:
|
73
|
+
6.12
|
74
|
+
|
75
|
+
faster_rubygems with cache:
|
76
|
+
6.48
|
77
|
+
|
78
|
+
normal rubygems, faster_require:
|
79
|
+
3.53
|
80
|
+
|
81
|
+
faster_rubygems with cache and with faster_require (have to use it as require 'faster_require')
|
82
|
+
2.97
|
60
83
|
|
84
|
+
* recommend this configuration, which means you'll have to add a require 'faster_require' to your rails script at the beginning, like in boot.rb
|
61
85
|
|
86
|
+
faster_rubygems without cache and with faster_require
|
87
|
+
3.31
|
62
88
|
|
63
89
|
|
64
|
-
lacking:
|
65
|
-
rails benchmarks, faster_require for everybody...
|
66
|
-
|
67
90
|
TODO:
|
68
|
-
jruby spawning itself was *so slow* it seemed (timer.rb)
|
69
|
-
|
70
|
-
only
|
71
|
-
|
91
|
+
jruby spawning itself was *so slow* it seemed (timer.rb)
|
92
|
+
only regenerate appropriate cache files after gem installs...I guess.
|
93
|
+
only cache lib filenames, not spec files, et al...
|
94
|
+
chmod after create (check if necessary first)
|
data/ext/mkrf_conf.rb
CHANGED
@@ -8,6 +8,18 @@ load File.expand_path(File.dirname(__FILE__)) + "/../internalize.rb" # install t
|
|
8
8
|
|
9
9
|
require File.dirname(__FILE__) + "/../lib/faster_rubygems/create_cache_for_all.rb"
|
10
10
|
|
11
|
+
|
12
|
+
if RUBY_VERSION[0..2] == '1.8'
|
13
|
+
begin
|
14
|
+
require File.dirname(__FILE__) + "/../lib/faster_rubygems/override.rb" # install it by default...
|
15
|
+
rescue RuntimeError => e
|
16
|
+
# swallow if it's a double install...for now...
|
17
|
+
raise e unless e.to_s =~ /cannot install twice/
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
|
11
23
|
f = File.open(File.join(File.dirname(__FILE__), "Rakefile"), "w") # create dummy rakefile to indicate success
|
12
24
|
f.write("task :default\n")
|
13
25
|
f.close
|
@@ -200,12 +200,12 @@ if defined?(Gem) then
|
|
200
200
|
GemsActivated = {}
|
201
201
|
def push_gem_version_on_load_path(gem_name, *version_requirements)
|
202
202
|
if version_requirements.empty?
|
203
|
-
unless path = GemPaths[
|
203
|
+
unless path = GemPaths[gem_name] then
|
204
204
|
puts "Could not find RubyGem #{gem_name} (>= 0)\n" if $VERBOSE || $DEBUG
|
205
205
|
raise Gem::LoadError, "Could not find RubyGem #{gem_name} (>= 0)\n"
|
206
206
|
end
|
207
207
|
# highest version gems *not* already active
|
208
|
-
if !
|
208
|
+
if !AllCaches.empty?
|
209
209
|
# then we are using the caches, and the stuff isn't preloaded yet
|
210
210
|
# copied and pasted...
|
211
211
|
require_paths = []
|
@@ -256,7 +256,7 @@ if defined?(Gem) then
|
|
256
256
|
|
257
257
|
if loaded_version = GemVersions[gem_name] then
|
258
258
|
case requirement
|
259
|
-
when ">", ">=" then
|
259
|
+
when ">", ">=", '=' then
|
260
260
|
return false if
|
261
261
|
(loaded_version <=> Gem.integers_for(version)) >= 0
|
262
262
|
when "~>" then
|
@@ -345,7 +345,7 @@ if defined?(Gem) then
|
|
345
345
|
end
|
346
346
|
|
347
347
|
# if the gem dir doesn't exist, don't count it against us
|
348
|
-
|
348
|
+
AllCaches = Gem.path.select{|path| File.exist?(path)}.map{|path|
|
349
349
|
cache_name = path + '/.faster_rubygems_cache'
|
350
350
|
if File.exist?(cache_name)
|
351
351
|
File.open(cache_name, 'rb') do |f|
|
@@ -358,7 +358,7 @@ if defined?(Gem) then
|
|
358
358
|
}
|
359
359
|
|
360
360
|
# we will use a clear cache as an indication of "non success" loading caches
|
361
|
-
|
361
|
+
AllCaches.clear if AllCaches.index(nil)
|
362
362
|
|
363
363
|
end
|
364
364
|
|
@@ -368,8 +368,8 @@ if defined?(Gem) then
|
|
368
368
|
|
369
369
|
|
370
370
|
begin
|
371
|
-
if !Gem::QuickLoader::
|
372
|
-
puts 'faster_rubygems using caches', Gem::QuickLoader::
|
371
|
+
if !Gem::QuickLoader::AllCaches.empty?
|
372
|
+
puts 'faster_rubygems using caches', Gem::QuickLoader::AllCaches.map{|fn, contents| fn} if $VERBOSE
|
373
373
|
Gem.calculate_all_highest_version_gems false
|
374
374
|
# use cached load instead of loading lib paths into the load path here
|
375
375
|
require File.expand_path(File.dirname(__FILE__)) + "/prelude_cached_load"
|
@@ -18,16 +18,16 @@ module Gem
|
|
18
18
|
def push_all_gems_that_might_match_and_reload_files lib, error
|
19
19
|
sub_lib = lib.gsub("\\", '/').split('/')[-1].split('.')[0]
|
20
20
|
success = false
|
21
|
-
raise if
|
22
|
-
|
21
|
+
raise if AllCaches.empty? # should never be empty...
|
22
|
+
AllCaches.each{|path, gem_list|
|
23
23
|
for gem_name, long_file_list in gem_list
|
24
|
-
if
|
25
|
-
puts 'activating' + gem_name + sub_lib.to_s if $DEBUG
|
24
|
+
if long_file_list[sub_lib.downcase]
|
25
|
+
puts 'activating' + gem_name + ' ' + sub_lib.to_s if $DEBUG
|
26
26
|
if gem(gem_name)
|
27
|
-
puts 'gem activated ' + gem_name + ' ' + sub_lib
|
27
|
+
puts 'gem activated ' + gem_name + ' ' + sub_lib if $VERBOSE || $DEBUG
|
28
28
|
success = true
|
29
29
|
end
|
30
|
-
puts 'done activeating' + gem_name + sub_lib if $DEBUG
|
30
|
+
puts 'done activeating' + gem_name + ' ' + sub_lib if $DEBUG
|
31
31
|
end
|
32
32
|
|
33
33
|
end
|
@@ -3,7 +3,7 @@ require File.dirname(__FILE__) + "/prelude_bin_path" # Gem.integers_for, for 1.9
|
|
3
3
|
module Gem
|
4
4
|
module QuickLoader
|
5
5
|
def create_cache gems_paths
|
6
|
-
puts 'faster_rubygems: creating caches'
|
6
|
+
puts 'faster_rubygems: creating all caches'
|
7
7
|
gems_paths.each do |path|
|
8
8
|
gem_versions = {}
|
9
9
|
gem_paths = {}
|
@@ -26,16 +26,23 @@ module Gem
|
|
26
26
|
# strip out directories, and the gem-d.d.d prefix
|
27
27
|
gem_paths.each{|k, v|
|
28
28
|
|
29
|
-
|
29
|
+
files = Dir[v + '/**/*.{rb,so,bundle}'].select{|f|
|
30
30
|
!File.directory? f
|
31
31
|
}.map{ |full_name|
|
32
32
|
full_name.sub(v + '/', '')
|
33
33
|
full_name.split('/')[-1].split('.')[0] # just a of a.b.c.rb, for now
|
34
34
|
}
|
35
|
+
|
36
|
+
hash_of_files = {}
|
37
|
+
files.each{|small_filename|
|
38
|
+
hash_of_files[small_filename] = true
|
39
|
+
}
|
40
|
+
gem_paths_with_contents[k] = hash_of_files
|
35
41
|
}
|
36
42
|
|
37
43
|
cache_path = path + '/.faster_rubygems_cache'
|
38
|
-
|
44
|
+
print '.'
|
45
|
+
puts cache_path if $VERBOSE
|
39
46
|
$stdout.flush
|
40
47
|
# accomodate for those not running as sudo...
|
41
48
|
if File.writable? path
|
data/lib/rubygems_plugin.rb
CHANGED
@@ -1,7 +1,14 @@
|
|
1
|
-
Gem.post_install {
|
2
|
-
require
|
1
|
+
Gem.post_install {
|
2
|
+
require "faster_rubygems/create_cache_for_all"
|
3
3
|
}
|
4
4
|
|
5
5
|
Gem.post_uninstall {
|
6
|
-
require
|
6
|
+
require "faster_rubygems/create_cache_for_all"
|
7
|
+
}
|
8
|
+
|
9
|
+
Gem.pre_uninstall { |gem_installer_instance, gem_spec|
|
10
|
+
|
11
|
+
if gem_installer_instance.spec.name == 'faster_rubygems' && RUBY_VERSION[0..2] == '1.8'
|
12
|
+
require "faster_rubygems/unoverride" # just in case
|
13
|
+
end
|
7
14
|
}
|
@@ -1,8 +1,7 @@
|
|
1
1
|
require File.dirname(__FILE__) + "/../lib/faster_rubygems"
|
2
2
|
require File.dirname(__FILE__) + "/../lib/faster_rubygems/prelude_create_cache"
|
3
3
|
require 'sane'
|
4
|
-
require '
|
5
|
-
require 'spec/autorun'
|
4
|
+
require 'rspec' # rspec 2
|
6
5
|
require 'fileutils'
|
7
6
|
raise if ENV['RUBYOPT'] # avoid silly testing conflicts
|
8
7
|
require 'rbconfig'
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faster_rubygems
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 49
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 11
|
9
|
+
- 1
|
10
|
+
version: 0.11.1
|
11
11
|
platform: ruby
|
12
12
|
authors: []
|
13
13
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-06-
|
18
|
+
date: 2010-06-29 00:00:00 -06:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -80,6 +80,22 @@ dependencies:
|
|
80
80
|
version: "0"
|
81
81
|
type: :development
|
82
82
|
version_requirements: *id004
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
prerelease: false
|
86
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
hash: 15
|
92
|
+
segments:
|
93
|
+
- 2
|
94
|
+
- 0
|
95
|
+
- 0
|
96
|
+
version: 2.0.0
|
97
|
+
type: :development
|
98
|
+
version_requirements: *id005
|
83
99
|
description:
|
84
100
|
email:
|
85
101
|
executables: []
|
@@ -107,15 +123,13 @@ files:
|
|
107
123
|
- lib/faster_rubygems/prelude_cached_load.rb
|
108
124
|
- lib/faster_rubygems/prelude_create_cache.rb
|
109
125
|
- lib/faster_rubygems/unoverride.rb
|
110
|
-
- lib/faster_rubygems_with_faster_require_too.rb
|
111
126
|
- lib/rubygems_plugin.rb
|
112
127
|
- spec/files/test_gem.rb
|
113
128
|
- spec/files/test_gem_const.rb
|
114
129
|
- spec/files/test_gem_func.rb
|
115
|
-
- spec/
|
130
|
+
- spec/files/test_load_sub.rb
|
116
131
|
- spec/spec.faster_rubygems.rb
|
117
|
-
-
|
118
|
-
- spec/reload.rb
|
132
|
+
- spec/spec.uses_cache_files.rb
|
119
133
|
has_rdoc: true
|
120
134
|
homepage:
|
121
135
|
licenses: []
|
@@ -123,7 +137,15 @@ licenses: []
|
|
123
137
|
post_install_message: |+
|
124
138
|
|
125
139
|
|
126
|
-
faster_rubygems installed
|
140
|
+
faster_rubygems installed into your site_ruby directory.
|
141
|
+
|
142
|
+
If you're on 1.9 please set your RUBYOPT env. variable thus, to use it:
|
143
|
+
|
144
|
+
$ export RUBYOPT=--disable-gems -rfaster_rubygems
|
145
|
+
|
146
|
+
or (windows)
|
147
|
+
|
148
|
+
C:>set RUBYOPT=--disable-gems -rfaster_rubygems
|
127
149
|
|
128
150
|
rdoc_options:
|
129
151
|
- --charset=UTF-8
|
@@ -158,6 +180,6 @@ test_files:
|
|
158
180
|
- spec/files/test_gem.rb
|
159
181
|
- spec/files/test_gem_const.rb
|
160
182
|
- spec/files/test_gem_func.rb
|
161
|
-
- spec/
|
162
|
-
- spec/spec.can_create_cache_file.rb
|
183
|
+
- spec/files/test_load_sub.rb
|
163
184
|
- spec/spec.faster_rubygems.rb
|
185
|
+
- spec/spec.uses_cache_files.rb
|
data/spec/reload.rb
DELETED
data/things_prelude_needs.txt
DELETED