1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/benchmark/cgi_escape_html.yml
Takashi Kokubun 0a29dc87e6
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>
2019-06-05 21:07:04 +09:00

40 lines
1.2 KiB
YAML

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