Skip to content

Commit 95160a6

Browse files
Require files first before nested folders
To avoid requiring faker/music and faker/internet explicitely, we require the outside files first, then nested afterwards. Co-Authored-By: Thiago Araujo <thd.araujo@gmail.com>
1 parent 5eace24 commit 95160a6

2 files changed

Lines changed: 10 additions & 14 deletions

File tree

experiments/lazy_loading.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ Machine specs: Apple M1 Pro 16GB memory on MacOS Sequoia 15.7.3..
2929

3030
profiler:
3131

32-
[LAZY_LOAD=1 bundle exec vernier run -- ruby -e "require 'faker'"](https://share.firefox.dev/3MMkRZ1)
33-
[bundle exec vernier run -- ruby -e "require 'faker'"](https://share.firefox.dev/3MMkRZ1)
32+
[LAZY_LOAD=1 bundle exec vernier run -- ruby -e "require 'faker'"](https://share.firefox.dev/46biNAs)
33+
[bundle exec vernier run -- ruby -e "require 'faker'"](https://share.firefox.dev/4ams9vM)
3434

3535
benchmark:
3636

@@ -41,12 +41,12 @@ Warming up --------------------------------------
4141
require 1.000 i/100ms
4242
lazyload 1.000 i/100ms
4343
Calculating -------------------------------------
44-
require 4.476 (± 0.0%) i/s (223.41 ms/i) - 23.000 in 5.154639s
45-
lazyload 9.856 (± 0.0%) i/s (101.46 ms/i) - 50.000 in 5.084043s
44+
require 4.698 (± 0.0%) i/s (212.88 ms/i) - 24.000 in 5.133782s
45+
lazyload 9.751 (± 0.0%) i/s (102.55 ms/i) - 49.000 in 5.032161s
4646

4747
Comparison:
48-
require: 4.5 i/s
49-
lazyload: 9.9 i/s - 2.20x faster
48+
require: 4.7 i/s
49+
lazyload: 9.8 i/s - 2.08x faster
5050
```
5151

5252
## Artifacts

lib/faker.rb

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -313,13 +313,9 @@ def klass.const_missing(class_name)
313313
end
314314

315315
if ENV['LAZY_LOAD'] != '1'
316-
# parent class must be loaded first
317-
require_relative 'faker/music'
318-
require_relative 'faker/internet'
316+
rb_files = []
317+
rb_files << File.join(mydir, 'faker', '*.rb')
318+
rb_files << File.join(mydir, 'faker', '/**/*.rb')
319319

320-
# maybe we can load files in this order:
321-
# faker/files first, followed by faker/default, then any nested folders.
322-
# or manually require files
323-
324-
Dir.glob(File.join(mydir, 'faker', '/**/*.rb')).each { |file| require file }
320+
Dir.glob(rb_files).each { |file| require file }
325321
end

0 commit comments

Comments
 (0)