Skip to content

perf: remove redundant .lower() calls in Headers - #3735

Open
shindonghwi wants to merge 1 commit into
encode:masterfrom
shindonghwi:perf/remove-redundant-lower-calls
Open

perf: remove redundant .lower() calls in Headers#3735
shindonghwi wants to merge 1 commit into
encode:masterfrom
shindonghwi:perf/remove-redundant-lower-calls

Conversation

@shindonghwi

@shindonghwishindonghwi commented Dec 19, 2025

Copy link
Copy Markdown

`Headers._list` stores tuples as `(raw_key, lowercase_key, value)`.

In `get_list()` and `delitem()`, calling `.lower()` on `item_key` is redundant since it's already lowercase.

# Beforeifitem_key.lower() ==get_header_key# After ifitem_key==get_header_key

Benchmark

# 10 headers, 100k iterations_list= [(key, key.lower(), b'value') forkeyinheaders]
get_header_key=b'x-header-5'# Original
[vfor_, k, vin_listifk.lower() ==get_header_key] # 0.0647s# Fixed
[vfor_, k, vin_listifk==get_header_key] # 0.0437s

Result: 32.5% faster (1.48x speedup)

The _list stores (raw_key, lowercase_key, value) tuples, so the
second element is already lowercase. Calling .lower() on it again
is unnecessary and wastes CPU cycles.
Benchmark shows ~1.6x speedup for header lookups.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@shindonghwi