mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
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>
This commit is contained in:
parent
b31e1b4a7c
commit
8d81e59aa7
2 changed files with 72 additions and 48 deletions
40
benchmark/cgi_escape_html.yml
Normal file
40
benchmark/cgi_escape_html.yml
Normal file
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue