• Stan Hu's avatar
    Speed up commit loads by disabling BatchLoader replace_methods · 18020f00
    Stan Hu authored
    We've seen a significant performance penalty when using
    `BatchLoader#__replace_with!`. This defines methods on the batch loader
    that proxy to the 'real' object using send. The alternative is
    `method_missing`, which is slower.  However, we've noticed that
    `method_missing` can be faster if:
    
    1. The objects being loaded have a large interface.
    2. We don't call too many methods on the loaded object.
    
    In production, we've seen the rendering times of the merge request
    widget increase as a result of loading commit data. BatchLoader attempts
    to call replace_methods on the lazy object, but this has a significant
    performance penalty. Disabling this mode
    (https://github.com/exAspArk/batch-loader/pull/45) appears to cut load
    times by about 50% for MergeRequestsController#show.
    
    Relates to https://gitlab.com/gitlab-com/gl-infra/infrastructure/issues/6941
    18020f00
commit_spec.rb 21.1 KB