Skip to content
  • Jean byroot Boussier's avatar
    4667f8ec
    bundled_gems.rb: Add a fast path (#11221) · 4667f8ec
    Jean byroot Boussier authored
    
    
    bundled_gems.rb: Add a fast path
    
    [Bug #20641] `Gem::BUNDLED_GEMS.warning?` adds a lot of extra
    work on top of `require`. When the call end up atually loading code
    the overhead is somewhat marginal.
    
    However it's not uncommon for code to go some late `require` in some
    paths, so it's expected that calling `require` with something already
    required is somewhat fast, and `bundled_gems.rb` breaks this assumption.
    
    To avoid this, we can have a fast path that in most case allow to
    short-circuit all the heavy computations. If we extract the feature
    basename and it doesn't match any of the bundled gems we care about
    we can return very early.
    
    With this change `require 'date'` is now only 1.33x slower on Ruby
    3.3.3, than it was on Ruby 3.2.2, whereas before this change it
    was at least 100x slower.
    
    Co-authored-by: default avatarJean Boussier <jean.boussier@gmail.com>
    4667f8ec
    bundled_gems.rb: Add a fast path (#11221)
    Jean byroot Boussier authored
    
    
    bundled_gems.rb: Add a fast path
    
    [Bug #20641] `Gem::BUNDLED_GEMS.warning?` adds a lot of extra
    work on top of `require`. When the call end up atually loading code
    the overhead is somewhat marginal.
    
    However it's not uncommon for code to go some late `require` in some
    paths, so it's expected that calling `require` with something already
    required is somewhat fast, and `bundled_gems.rb` breaks this assumption.
    
    To avoid this, we can have a fast path that in most case allow to
    short-circuit all the heavy computations. If we extract the feature
    basename and it doesn't match any of the bundled gems we care about
    we can return very early.
    
    With this change `require 'date'` is now only 1.33x slower on Ruby
    3.3.3, than it was on Ruby 3.2.2, whereas before this change it
    was at least 100x slower.
    
    Co-authored-by: default avatarJean Boussier <jean.boussier@gmail.com>
Loading