Optimize method_missing
via alias_method
#596
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
jbuilder
provides a nice DSL where something likeis simply sugar for the
set!
APIThe sugar doesn't come for free, though;
set!
performs substantially better in both CPU and memory. Consider the following benchmark:It's around 1.5x slower to use the DSL over
set!
! The main culprit for this is the overhead inherent inmethod_missing
. The DSL also results in an additional memory allocation to allocate for*args
, which is just passed off to set. This is something that adds up for larger responses.What this PR does is simply defines
method_missing
as an alias toset!
. This saves on some busy work that existed in the method originally (ex: it was doing a::Kernel.block_given?
check, even thoughset!
already does this.). It also saves on the memory allocation for*args
.The before after comparison for the
method_missing
implementationFinal comparison between
method_missing
andset!
This gets the DSL to be nearly on par with a regular
set!
call.