fastup 1.0.0 → 1.0.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.
- checksums.yaml +5 -5
- data/README.md +12 -26
- data/lib/fastup.rb +3 -1
- data/test/fastup_test.rb +5 -6
- data/test/test_helper.rb +6 -0
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: eff7fb62d73261c1f323338c749f82791546ab1b74de3d257e2254f7d19485ef
|
4
|
+
data.tar.gz: fc7578d69d7c3da331cd4515da1f25344b9d30597e744aab26802ec929822e66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b320c6cfb22ae4c3e9c8cbd3a55d7c009a3503b4b6bd0e090205c5578ffe4564194047bd6e2336e2759431840d3c45cc7c20320bc92bdfe768872e7ae8d94c1
|
7
|
+
data.tar.gz: 07a1a6f7e9fcc4694a60b9770842bf33e7e8e64fd7b3dd1916c61f8bba4ff2366c78f05875063e118b8dc7e5c6c42a032f2a22027369fe08bac96f622d0baaac
|
data/README.md
CHANGED
@@ -4,33 +4,19 @@ Fastup builds an index from `$LOAD_PATH` and patches `require` to use
|
|
4
4
|
that index to significantly speed up booting up large Rails apps with
|
5
5
|
many dependencies.
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
$ time echo 'puts "loaded #{$LOADED_FEATURES.size} features"' | bundle exec rails c
|
14
|
-
loaded 5095 features
|
15
|
-
|
16
|
-
real 0m23.652s
|
17
|
-
user 0m14.300s
|
18
|
-
sys 0m9.237s
|
7
|
+
When `require 'code'` is called, Ruby searches each element of
|
8
|
+
`$LOAD_PATH`, attempting to load `code.rb` from each directory in
|
9
|
+
`$LOAD_PATH`. Watching the output of `strace` while starting a Ruby
|
10
|
+
program reveals a large number of failed attempts to open non-existent
|
11
|
+
files, until the correct path is found. The index built by `fastup`
|
12
|
+
allows skipping many of these failed attempts.
|
19
13
|
|
20
|
-
|
14
|
+
The speedup is most noticeable in applications with many
|
15
|
+
dependencies. With few dependencies, the overhead of `fastup` will
|
16
|
+
cause a small slowdown. Test the speedup first, to see if `fastup` is
|
17
|
+
worth it or not for any particular application.
|
21
18
|
|
22
|
-
|
23
|
-
loaded 5097 features
|
24
|
-
|
25
|
-
real 0m15.142s
|
26
|
-
user 0m11.005s
|
27
|
-
sys 0m4.058s
|
28
|
-
```
|
29
|
-
|
30
|
-
With fewer dependencies, the speedup is smaller. At some point, the
|
31
|
-
overhead of building the index means `fastup` will cause a small
|
32
|
-
slowdown. Test the speedup first, to see if `fastup` is worth it or
|
33
|
-
not for any particular application.
|
19
|
+

|
34
20
|
|
35
21
|
## Usage
|
36
22
|
|
@@ -41,7 +27,7 @@ populated with all dependencies and before most of them have been
|
|
41
27
|
|
42
28
|
For example in `config/boot.rb` of a Rails app:
|
43
29
|
|
44
|
-
```
|
30
|
+
```ruby
|
45
31
|
require 'rubygems'
|
46
32
|
|
47
33
|
# Set up gems listed in the Gemfile.
|
data/lib/fastup.rb
CHANGED
data/test/fastup_test.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
require 'benchmark'
|
2
2
|
require 'tmpdir'
|
3
3
|
|
4
|
-
require '
|
5
|
-
|
6
|
-
require 'fastup'
|
4
|
+
require 'test_helper'
|
7
5
|
|
8
6
|
module Fastup
|
9
7
|
class TestAppBoot < Minitest::Test
|
8
|
+
tag :slow
|
10
9
|
def test_app_boot
|
11
10
|
results = {}
|
12
11
|
|
@@ -18,12 +17,12 @@ module Fastup
|
|
18
17
|
results[:total_fastup] = Benchmark.measure {
|
19
18
|
out = `USE_FASTUP=1 bundle exec ruby boot.rb 2>/dev/null`
|
20
19
|
raise "fastup exited with error: #{out}" unless $?.success?
|
21
|
-
results[:output_fastup] = out.lines.reject{ |p| p =~ %r{
|
20
|
+
results[:output_fastup] = out.lines.reject{ |p| p =~ %r{/lib/fastup} }
|
22
21
|
}
|
23
22
|
results[:total_nofastup] = Benchmark.measure {
|
24
23
|
out = `bundle exec ruby boot.rb`
|
25
24
|
raise "nofastup exited with error: #{out}" unless $?.success?
|
26
|
-
results[:output_nofastup] = out.lines.reject{ |p| p =~ %r{
|
25
|
+
results[:output_nofastup] = out.lines.reject{ |p| p =~ %r{/lib/fastup} }
|
27
26
|
}
|
28
27
|
end
|
29
28
|
end
|
@@ -31,7 +30,7 @@ module Fastup
|
|
31
30
|
results[:output_fastup].reject!{ |p| p =~ %r{fastup/lib/fastup} }
|
32
31
|
results[:output_nofastup].reject!{ |p| p =~ %r{fastup/lib/fastup} }
|
33
32
|
|
34
|
-
|
33
|
+
warn("\nfastup: %.2f nofastup: %.2f" % [results[:total_fastup].total, results[:total_nofastup].total])
|
35
34
|
|
36
35
|
assert results[:total_fastup].total < results[:total_nofastup].total,
|
37
36
|
"expected fastup (#{results[:total_fastup]}) to be faster than without (#{results[:total_nofastup]})"
|
data/test/test_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick Mahoney
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest-tagz
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,6 +95,7 @@ files:
|
|
81
95
|
- lib/fastup/autoapply.rb
|
82
96
|
- test/app/boot.rb
|
83
97
|
- test/fastup_test.rb
|
98
|
+
- test/test_helper.rb
|
84
99
|
homepage: https://github.com/raisemarketplace/fastup
|
85
100
|
licenses:
|
86
101
|
- MIT
|
@@ -101,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
116
|
version: '0'
|
102
117
|
requirements: []
|
103
118
|
rubyforge_project:
|
104
|
-
rubygems_version: 2.6
|
119
|
+
rubygems_version: 2.7.6
|
105
120
|
signing_key:
|
106
121
|
specification_version: 4
|
107
122
|
summary: index load path to accelerate boot
|