Feature #17219
Updated by lzap (Lukas Zapletal) about 4 years ago
Hello, URI#hostname extends URI#host with IPv6 support. In URI, IPv6 address must have square brackets (e.g. `http://[2001:db8::1]`), URI#hostname strips these characters out while URI#hostname= adds them if missing. There are three regular expressions to perform these tasks which can dramatically slow down performance. I am attaching a two-line patch and here is a benchmark: https://gist.github.com/lzap/24cbecb47daf29111350e41a24250922 Results are ``` Calculating ------------------------------------- hostname on an ipv6 (orig) 4.018M (± 0.4%) i/s - 20.175M in the gist. 5.021128s hostname on an ipv6 (new) 4.753M (± 0.5%) i/s - 23.930M in 5.034444s Comparison: hostname on an ipv6 (new): 4753483.7 i/s hostname on an ipv6 (orig): 4018053.7 i/s - 1.18x (± 0.00) slower Calculating ------------------------------------- hostname on an ipv4 (orig) 4.145M (± 0.8%) i/s - 21.031M in 5.073638s hostname on an ipv4 (new) 4.960M (± 0.6%) i/s - 25.142M in 5.069027s Comparison: hostname on an ipv4 (new): 4960111.9 i/s hostname on an ipv4 (orig): 4145365.6 i/s - 1.20x (± 0.00) slower Calculating ------------------------------------- hostname on an host (orig) 4.183M (± 0.4%) i/s - 20.984M in 5.016865s hostname on an host (new) 4.976M (± 0.7%) i/s - 25.213M in 5.066627s Comparison: hostname on an host (new): 4976454.5 i/s hostname on an host (orig): 4182840.9 i/s - 1.19x (± 0.00) slower Calculating ------------------------------------- hostname= on an ipv6 (orig) 958.023k (± 1.1%) i/s - 4.798M in 5.008884s hostname= on an ipv6 (new) 1.252M (± 1.2%) i/s - 6.337M in 5.063109s Comparison: hostname= on an ipv6 (new): 1251868.4 i/s hostname= on an ipv6 (orig): 958023.5 i/s - 1.31x (± 0.00) slower Calculating ------------------------------------- hostname= on an ipv4 (orig) 2.246M (± 1.0%) i/s - 11.392M in 5.073679s hostname= on an ipv4 (new) 5.739M (± 0.3%) i/s - 29.246M in 5.095776s Comparison: hostname= on an ipv4 (new): 5739237.9 i/s hostname= on an ipv4 (orig): 2245518.7 i/s - 2.56x (± 0.00) slower Calculating ------------------------------------- hostname= on an host (orig) 2.266M (± 0.7%) i/s - 11.504M in 5.076980s hostname= on an host (new) 5.795M (± 0.5%) i/s - 29.263M in 5.049941s Comparison: hostname= on an host (new): 5794820.2 i/s hostname= on an host (orig): 2266068.9 i/s - 2.56x (± 0.00) slower ``` A patch and a PR incoming.