about summary refs log tree commit homepage
path: root/ext/unicorn_http/common_fields.gperf
DateCommit message (Collapse)
2019-07-04http: memoize more common fields
"DNT" is common, nowadays. "Forwarded" is... *shrug* It's an RFC, at least. "Origin" is a CORS, and something I've seen. I've seen "Upgrade-Insecure-Requests", "X-Forwarded-Host", "X-Request-ID", and "X-Requested-With" in the wild, too; so add those.
2019-07-04http: use gperf for common fields optimization
GNU gperf is a commonly-used tool for generating perfect hashes and available on every platform unicorn runs on. C Ruby, gcc, glibc all already use it. Using a hash lookup instead of a linear scan already shows measurable improvements when memoized header keys are all used: * test/benchmark/http_parser.rb (no options): 100000 iterations user system total real - 0.411857 0.000200 0.412057 ( 0.412070) + 0.397960 0.000181 0.398141 ( 0.398149) Results which require generating a new string from an unmemoized header is less significant, but still consistent measurable: * test/benchmark/http_parser.rb -H 'DNT: 1' 100000 iterations user system total real - 0.461416 0.000000 0.461416 ( 0.461417) + 0.461329 0.000000 0.461329 ( 0.461363) Most importantly, this change allows us to memoize more keys without worrying too much about the overhead of a O(n) scan.