Speed up commit loads by disabling BatchLoader replace_methods
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:
- The objects being loaded have a large interface.
- 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. Disabling this
replace_methods
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
Edited by Stan Hu