Skip to content

Speed up MR widget by disabling BatchLoader replace_methods

Stan Hu requested to merge sh-disable-replace-methods-batch-loader into master

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.

Edited by Stan Hu

Merge request reports