html_escape: Avoid buffer allocation for strings with no escapable character #87
+21
−6
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.
The existing
html_escape
implementation always allocates buffer space (6 timesthe length of the input string), even when the input string does not contain any
character that needs to be escaped.
This PR modifies the implementation of
optimized_escape_html
to notpre-allocate an output buffer, but instead allocate it on the first occurence of
a character that needs escaping. In addition, instead of copying non-escaped
characters one by one to the output buffer, continuous non-escaped segments of
characters are copied using
memcpy
.A synthetic benchmark employing the input strings used in the
test_html_escape
method in
test/test_erb.rb
shows the modified implementation to be about 35%faster than the original: