diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2019-06-05 19:28:51 +0900 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2019-06-05 21:07:04 +0900 |
commit | 0a29dc87e62c701db56816cb430daf07a4f02bea (patch) | |
tree | 8c4afbace1e6a42d36e0401d2f8b1ddc7bdea373 /benchmark/cgi_escape_html.yml | |
parent | f3c877e8deaea91ff27c0fca837c9388d030a896 (diff) | |
download | ruby-0a29dc87e62c701db56816cb430daf07a4f02bea.tar.gz |
Optimize CGI.escapeHTML by reducing buffer extension
and switch-case branches.
Buffer allocation optimization using `ALLOCA_N` would be the main
benefit of patch. It eliminates the O(N) buffer extensions.
It also reduces the number of branches using escape table like
https://mattn.kaoriya.net/software/lang/c/20160817011915.htm.
Closes: https://github.com/ruby/ruby/pull/2226
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
Co-authored-by: Yasuhiro MATSUMOTO <mattn.jp@gmail.com>
Diffstat (limited to 'benchmark/cgi_escape_html.yml')
-rw-r--r-- | benchmark/cgi_escape_html.yml | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/benchmark/cgi_escape_html.yml b/benchmark/cgi_escape_html.yml new file mode 100644 index 0000000000..af6abd08ac --- /dev/null +++ b/benchmark/cgi_escape_html.yml @@ -0,0 +1,40 @@ +prelude: require 'cgi/escape' +benchmark: + - name: escape_html_blank + prelude: str = "" + script: CGI.escapeHTML(str) + loop_count: 20000000 + - name: escape_html_short_none + prelude: str = "abcde" + script: CGI.escapeHTML(str) + loop_count: 20000000 + - name: escape_html_short_one + prelude: str = "abcd<" + script: CGI.escapeHTML(str) + loop_count: 20000000 + - name: escape_html_short_all + prelude: str = "'&\"<>" + script: CGI.escapeHTML(str) + loop_count: 5000000 + - name: escape_html_long_none + prelude: str = "abcde" * 300 + script: CGI.escapeHTML(str) + loop_count: 1000000 + - name: escape_html_long_all + prelude: str = "'&\"<>" * 10 + script: CGI.escapeHTML(str) + loop_count: 1000000 + - name: escape_html_real + prelude: | # http://example.com/ + str = <<~HTML + <body> + <div> + <h1>Example Domain</h1> + <p>This domain is established to be used for illustrative examples in documents. You may use this + domain in examples without prior coordination or asking for permission.</p> + <p><a href="http://www.iana.org/domains/example">More information...</a></p> + </div> + </body> + HTML + script: CGI.escapeHTML(str) + loop_count: 1000000 |